我们有一些处理器通过生产者提交补偿,以实现一次准确的交货。
最近我注意到所有偏移量都是偶数(0,2,4,6,8),并且在代理日志中有以下警告。
[2019-01-24 03:06:24,473] WARN [GroupMetadataManager brokerId=0] group: xxxx-group with leader: 1e9856a9-bce1-4a28-9774-0117382a9751-4d9411d1-36fb-4332-af9b-beb65aedfed1 has received offset commits from consumers as well as transactional producers. Mixing both types of offset commits will generally result in surprises and should be avoided. (kafka.coordinator.group.GroupMetadataManager)
我们一次执行一次到底有什么问题吗?这真的会带来惊喜吗?
答案 0 :(得分:1)
我猜您正在为每条记录提交一个事务。
在提交(或中止)时,将control batch写入分区,并且需要偏移量。此控制记录对客户不可见,但被经纪人用来定界交易并找到其最终状态。
基本上,您的记录采用偶数偏移量,每个记录都有一个提交控制批处理,它们采用下一个偏移量。
现在有关日志中的警告:
如果有一个交易生产者和一个消费者都为同一个组提交抵消额,您将得到此信息。您应该确保只有交易生产者才提交偏移量,这样它们才是您的交易的一部分,并且记录将被处理一次。