如果Kafka broker配置了Log-Append Time
,那么无论生产者/流设置了什么时间戳,broker都会覆盖消息时间戳吗?
从流时间-文档中,我得到的印象是CreateTime
有些不可靠-时间戳有时只被转发(例如,当使用context.forward()
时(,有时被覆盖(例如,在使用puntuate()
时(。因此,我想知道Log-Append Time
在设置消息时间戳时是否优先(即覆盖流设置的时间戳(?
是的,LogAppendTime
优先,这意味着如果将主题配置为使用LogAppendTime
,则Streams应用程序设置的时间戳(无论如何生成(将被忽略,并在生成输出记录时由代理用日志附加时间覆盖。
此外,我不认为CreateTime
在你看来是不可靠的。punctuate()
不会覆盖现有的时间戳-它用于在特定时间点生成新记录,因此没有以前的CreateTime
可用-流必须选择新的时间戳。
ProducerRecord类的javadoc确认LogAppendTime
优先:
如果主题配置为使用LogAppendTime,则在将消息附加到其日志时,broker将使用broker本地时间覆盖生产者记录中的时间戳。