Kafka MirrorMaker带有时间戳的不同版本之间

时间:2018-01-13 10:00:00

标签: apache-kafka

我想使用Kafka MirrorMaker镜像从Kafka集群版本0.8到另一个Kafka集群版本1.0的所有事件,两个集群都应该保持生产。

问题是旧的Kafka(版本0.8)存储没有时间戳字段的消息(时间戳是消息的一部分)。

我正在寻找一种方法,Kafka MirrorMaker可以生成带有Kafka集群1.0时间戳的消息,该消息将从消息中提取(事件时间而不是处理时间)。

有没有人知道如何使用Kafka mirromaker或其他工具?

3 个答案:

答案 0 :(得分:2)

您可以使用mirrormaker 0.8将数据带到1.0集群,然后使用1.0版本和集群内镜像使用kafka流应用程序或镜像制作器消息处理程序进行转换。这是一个示例消息处理程序。 https://github.com/gwenshap/kafka-examples/blob/master/MirrorMakerHandler/src/main/java/com/shapira/examples/TopicSwitchingHandler.java

无论哪种方式,如果您想要消息中的时间戳,您必须先将其转移到1.0群集,然后在那里处理它。否则,您正在查看某个应用程序读取并在一个版本上解析该消息,然后在新版本的消息格式上创建新记录。这使您重新处理的能力有限。我只是将旧数据拉入新群集,并在逐步淘汰旧格式时为新数据格式创建一个新主题。

答案 1 :(得分:0)

正如您所指出的,镜像制作者在添加Kafka之前无法读取0.10之前的时间戳。

NiFi和Streamsets不支持设置记录时间戳(尚未)。

您最好的选择是要求您反馈消费者的消息,提取记录中的时间戳,然后创建并发送带有该时间戳的ProducerRecord。 Spark / Flink最适合快速使用

答案 2 :(得分:0)

您可能希望将 KafkaTopic 配置为镜像到哪个数据message.timestamp.type=LogAppendTime。 当读取 v0.8.X 中的数据时,如您所知,它将没有任何时间戳。当MirrorMaker脚本将此消息发布到配置了message.timestamp.type=LogAppendTime V0.10.X (或更高版本)时,将记录时间戳。