源和汇主题的输入记录时间戳和输出记录时间戳是否相同?

问题描述 投票:-1回答:1

我使用Processor API创建kafka流应用程序。

以下是我创建主题以将时间戳附加到所有传入消息的方法

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic topicName --config message.timestamp.type = CreateTime

工作流正在处理来自源主题的传入消息并将其发布到sink主题。出于某种奇怪的原因,我在源和宿主题消息中看到了相同的时间戳。比如说,在源主题中,消息创建时间是T0,在sink主题中也是如此。

我需要做些什么来查看sink主题消息中的更新时间戳?

java apache-kafka apache-kafka-streams
1个回答
0
投票

如果使用CreateTime配置主题,则时间戳存储将是生产者提供的时间戳。

对于普通的KafkaProducer,您没有明确指定时间戳,KafkaProducer使用System.currentTimeMillis()并将消息发送给代理。

对于Kafka Streams,如果您读取具有特定时间戳的输入记录,我们将专用时间戳推理逻辑来计算结果记录的时间戳。因此,Kafka Streams在将其交给内部使用的KafkaProducer时显式设置时间戳,因此生产者只使用此时间戳并且不使用当前的挂钟时间。对于流处理,这通常是期望的行为。

如果您有一个简单的管道只将数据从一个主题复制到另一个主题,则时间戳推断将使用输入记录时间戳作为输出记录时间戳。

你可以做两件事来获得不同的语义:

  1. 为您配置WallClockTimestampExtractor Kafka Streams应用程序。对于这种情况,Kafka Stream不会使用嵌入式记录时间戳,而是使用当前的挂钟时间来获取输出记录的时间戳。
  2. 使用AppendTime而不是CreateTime配置输出主题。对于这种情况,代理总是用当前代理挂钟时间覆盖生产者提供的记录时间戳。
© www.soinside.com 2019 - 2024. All rights reserved.