根据最近的一篇文章,kafka可以在复制配置下丢弃已确认的消息:
https://aphyr.com/posts/293-call-me-maybe-kafka
如果必须绝对确定消息已传递给消费者,此解决方案是否适用于所有情况:
建立两个主题,一个用于发送,一个用于接收
producer发送消息,包括发送主题上的令牌(uuid)
producer独立于kafka,将发送的消息和令牌保存到本地存储
只有当生产者在接收主题上接收到来自使用者的确认消息时,才会从本地存储中删除发送的消息,该消息包含在发送主题上发送的相同令牌。
生产者使用相同的令牌定期重新发送消息,直到收到确认。唯一令牌确保即使消息被接收两次(第一次由于任何原因未被确认),消费者也会将其标识为重复。
即使在邮件丢失的情况下也能正常工作吗?这个图案有名字吗?
1条答案
按热度按时间wxclj1h51#
这似乎有点过分了。只要在使用者端跟踪偏移量就足够了,并且根据您认为下游系统成功地处理了什么消息,就可以提交偏移量或不提交偏移量。
aphyr发现的分裂大脑问题是用
unclean.leader.election.enable
设置,您需要设置为false
(默认为true
,因为这是最后的手段)。你还应该看看
ack
producer配置设置,该设置确定需要确认写入的同步复制副本数量才能被视为成功。您可以阅读更多关于这些设置和Kafka提供的一般交货保证在这里,靠近页面底部。
ps这可能是值得追踪的问题。
希望有帮助:)