我们有Samza任务从Kafka输出流中读取消息,但如果在处理消息时有任何可重试的失败,那么我希望我的Samza任务再次读取相同的消息并重新处理它。在成功处理消息后,确认它以进行检查点。
有没有办法手动控制检查点(就像Kafka Consumer提供的“手动偏移控制”一样,将enable.auto.commit设置为false:https://kafka.apache.org/0100/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html)
我遇到了这个文档https://samza.apache.org/learn/documentation/0.13/jobs/reprocessing.html,它讨论了重新处理以前处理过的数据,但它没有提供任何基于确认的检查点控制。
答案 0 :(得分:3)
西特,
您可以从StreamTask执行手动提交。如果将task.commit.ms
设置为-1,则禁用Samza作业中的自动提交。在这种情况下,任务应该在您准备好确认时通过调用taskCoordinator.commit()
来手动触发提交。
您可以在此处找到有关检查点的文档 - http://samza.apache.org/learn/documentation/0.13/container/checkpointing.html。 我认为网站中的文档不足,因为它没有详细介绍手动提交方案。还需要更新配置表,以便用户明白支持手动提交。
HTH :)