我正在研究使用Kafka流进行重新处理的数据。有一个不错的工具可用于重置流应用程序的数据重新处理:应用程序重置工具。
但是此工具通常将应用程序状态重置为零,并从头开始重新处理所有内容。
有一些方案,我们想从特定点重新处理数据,即:
- 当前应用程序中的错误修复
- 使用一些附加处理器更新应用程序,并使用相同的应用程序ID 运行
与Flink一样,我们也有SavePoints概念,可以还原以前的操作员状态并添加新操作员而不会出错。
我还提到以下文档:
https://cwiki.apache.org/confluence/display/kafka/kafka streams data data %(Re)Processing Scenarios
https://www.confluent.io/blog/data-reprocessing-with-kafka-streams-resetting-a-treams-application/
想知道:
- KStream中是否有任何检查点类型的机制?
- 如何从特定点重新运行Kafka流应用程序?
- 如果我们在应用程序实例之一中更改代码并使用旧应用ID运行会发生什么?
kafka流目前没有保存点概念(版本1.0)。
- 目前不是(v1.0)
- 是的。在下一个版本中,这将是直接重置工具的一部分。在1.0中,您可以使用
bin/kafka-consumer-groups.sh
为应用程序提交起始偏移量(注意,application.id
==group.id
)。对于较旧的Kafka版本,您可以构建一个自定义工具来提交开始偏移 - 一般而言,它会破裂。因此,您需要使用新的
application.id
(这是一个知道的问题,并且将在将来的版本中解决)。