验证 Kafka 主题中是否存在消息
Verify existence of message in a Kafka topic
我希望避免向 Kafka 主题发送重复消息。
实现它的理想方法是什么?
使用 Apache Kafka 的 Java 客户端,无论如何在调用 KafkaProducer.send
之前验证消息是否存在
我指的是这个doc
您每次发送新邮件时都检查是否已发送相同的邮件是不切实际的。换一种方式思考:您可以调用 KafkaProducer.send 方法,并通过回调通知您成功或失败。
这几乎超出了 Kafka 的范围。您需要使用为随机访问提供适当索引的不同存储来做到这一点。
根据您的需要,它可以是(分布式)缓存、键值存储或其他任何东西。
您可能希望在消费者端而不是生产者端执行此操作,因为不同的消费者可能使用不同的重复数据删除策略(有些消费者可能只是容忍重复)。
目前 (Kafka 0.10.1
),Kafka 无法在写入时进行精确一次交付。无论您想采取什么解决方法,总会有差距,您最终可能会丢失消息或重复消息。
但是,Kafka 会添加一个idempotent producer (planned for 0.10.2
) that will allow you to avoid duplicate writes. The target date for 0.10.2
release is beginning 2017。
我希望避免向 Kafka 主题发送重复消息。
实现它的理想方法是什么?
使用 Apache Kafka 的 Java 客户端,无论如何在调用 KafkaProducer.send
之前验证消息是否存在我指的是这个doc
您每次发送新邮件时都检查是否已发送相同的邮件是不切实际的。换一种方式思考:您可以调用 KafkaProducer.send 方法,并通过回调通知您成功或失败。
这几乎超出了 Kafka 的范围。您需要使用为随机访问提供适当索引的不同存储来做到这一点。 根据您的需要,它可以是(分布式)缓存、键值存储或其他任何东西。
您可能希望在消费者端而不是生产者端执行此操作,因为不同的消费者可能使用不同的重复数据删除策略(有些消费者可能只是容忍重复)。
目前 (Kafka 0.10.1
),Kafka 无法在写入时进行精确一次交付。无论您想采取什么解决方法,总会有差距,您最终可能会丢失消息或重复消息。
但是,Kafka 会添加一个idempotent producer (planned for 0.10.2
) that will allow you to avoid duplicate writes. The target date for 0.10.2
release is beginning 2017。