我有一个 Apache-Samza 项目,但我遇到了重复数据的问题。
这是我的检查点配置:
task.checkpoint.factory=org.apache.samza.checkpoint.kafka.KafkaCheckpointManagerFactory
task.checkpoint.system=kafka
task.checkpoint.replication.factor=2
task.commit.ms=20000
在文档上我们可以阅读:
如果配置了 task.checkpoint.factory,则此属性确定写入检查点的频率。该值是检查点之间的时间,以毫秒为单位。检查点的频率影响故障恢复:如果容器意外失败(例如由于崩溃或机器故障)并重新启动,它将在最后一个检查点恢复处理。自失败容器上的最后一个检查点以来处理的任何消息都会再次处理。更频繁地检查点会减少可能被处理两次的消息数量,但也会使用更多资源。
那么我可以更改task.commit.ms=20000
为 250 毫秒或 1 毫秒吗?这是好还是很坏?我有一个非常好的集群。
为什么我需要改变这个,因为这个 Samza(worker) 每周崩溃 1-3 次。现在临时解决方案是每次提交偏移量。
文档参考: