kafka发布消息怎样达到不重不漏

感谢邀请。
【kafka发布消息怎样达到不重不漏】 Producer端去重的一种方法,是使用类似idempotent producer的方法:每个消息自带一个sequence number,在server端记录每一个当前producer的最新sequence number,当收到重复sequence number的消息的时候自动过滤。细节可以参见:Idempotent Producer 。
可以看出来producer端去重比起consumer端去重要复杂很多,因为其实是要靠server自己去重,自己实现很麻烦,所以如果能够在consumer端去重最好还是不要在produer端。在最新的KIP98(exactly-once)里面我们打算在Kafka内部实现这个机制:
KIP-98 - Exactly Once Delivery and Transactional Messaging
一切顺利的话今年六月份的release应该就会有这个feature,到时候Kafka就可以支持exactly-once semantics, 用户自己不再需要去重了。

■网友
你好。
要看生产者是什么吧, 如果是数据库那天然就没有问题。

■网友
目前kafka 0.11.0以上版本已经提供对exactly once的支持。
0.11.0以下版本,需要自己处理。
Producer端:因为producer端是批量发送方式,因此需要进行幂等校验,就是发送端每次发消息带一个sequenceId,接收端进行校验,重复的丢弃掉。
Consumer端:需要自己管理offset,也就是对消息的消费和offset的保存绑定为一个事务。
也么offset保存成功,消息消费成功,要么都失败,具体的可以见官方HDFS的例子。


    推荐阅读