每个分区的单个Writer在Kafka生成器端获得一个语义

时间:2016-08-27 16:31:36

标签: apache-kafka kafka-producer-api

要在生产者端获得一次语义,Kafka建议使用1.使用single-writer per partition并且每次遇到网络错误时,请检查该分区中的最后一条消息,看看上次写入是否成功。 / p>

使用Partition key和自定义分区实现,我们可以指定消息的目标分区。

两者是相同还是不同,如果不同,如何检查上次写入是否成功?我需要在每个分区中使用HW来做这件事吗?

1 个答案:

答案 0 :(得分:0)

'单一编写器'表示只有一个进程写入特定的kafka分区/分区。使用“单一作者”,高可用性,可扩展性和高性能支持“一次交付”非常具有挑战性。我不建议用kafka这样做。我会选择不同的技术。顺便说一句,他们计划实施一次交付 - 您也可以等待。

我通过以下方式看到实现:

  1. 代理级别 您决定哪个应用程序(分片)负责处理消息。 您可以拥有自己的业务逻辑如何除以分片。 您可能需要一些“服务发现”来处理哪个分片负责消息(它可以是zookeeper)。 如果发生故障,您还需要提供一些重试策略。
  2. 碎片级别 它负责写入特定的kafka分区。您需要保证只有一个进程负责特定分区。 所以你需要一些集中锁定(例如zookeeper)。 如果shard发生故障,另一个节点可以获取锁定并开始处理写入(您需要更新服务发现)。获取锁定后,您可以安全地阅读最新消息并比较是否已写入。