我希望避免向Kafka主题发送重复的消息。
实现它的理想方法是什么?
在Apache Kafka上使用Java客户端,无论如何都要在调用 KafkaProducer.send
之前验证是否存在消息我指的是doc
答案 0 :(得分:1)
目前(Kafka 0.10.1
),无法与Kafka一起完成一次交付。无论你想做什么工作,都会有差距,你最终可能会丢失消息或重复。
但是,Kafka将添加idempotent producer(计划用于0.10.2
),以避免重复写入。 0.10.2
发布的目标日期为beginning 2017。
答案 1 :(得分:0)
每次发送新邮件时,检查是否传递了相同的邮件是不切实际的。从另一个角度考虑:您可以通过回调来调用KafkaProducer.send方法,通知您成功或失败。
答案 2 :(得分:0)
这几乎超出了卡夫卡的范围。您需要使用为随机访问提供正确索引的其他存储来实现此目的。 根据您的需要,可以是(分布式)缓存,键值存储或其他任何内容。
您可能希望在消费者方面而不是生产方那样做,因为不同的消费者可能会使用不同的重复数据删除策略(而且有些消费者可能只是容忍重复)。