Apache Kafka主题分区消息处理

时间:2016-01-13 13:10:22

标签: apache-kafka

我对Apache Kafka中的主题分区感到有点困惑。所以我正在绘制一个简单的用例,我想知道在不同场景中会发生什么。所以这就是:

我有一个主题T,它有4个分区TP1,TP2,TP4和TP4。

假设我有8条消息M1到M8。现在,当我的生产者将这些消息发送到主题T时,Kafka经纪人将在以下情况下如何收到这些消息:

场景1:只有一个kafka代理实例具有上述分区的主题T.

场景2:有两个kafka代理实例,每个节点与前面提到的分区具有相同的主题T.

现在假设kafka经纪人实例1出现故障,消费者将如何反应?我假设我的消费者正在从经纪人实例1中读取。

1 个答案:

答案 0 :(得分:4)

我将引导您完成分区复制,因为您需要了解复制以了解答案。

单个经纪人被视为"领导者"对于给定的分区。所有产品和消费都与领导者一起发生。分区的副本将复制到可配置数量的其他代理。领导者处理将产品复制到其他复制品。追赶领导者的其他复制品称为"同步复制品。"您可以配置"赶上"装置

只有当消费者提交到所有同步副本时,才会向消息提供消息。

如果给定分区的领导者失败,Kafka协调员将从同步副本列表中选出一个新的领导者,消费者将开始从这个新领导者消费。当新领导人当选时,消费者将有几毫秒的额外延迟。如果协调器发生故障,也会自动选择新的协调器(这也会增加延迟)。

如果主题配置为没有副本,那么当给定分区的领导者失败时,消费者无法从该分区消费,直到作为领导者的代理重新联机。或者,如果它永远不会重新联机,那么先前生成到该分区的数据将永远丢失。

直接回答您的问题:

  • 方案1:如果为主题配置了复制,并且每个分区都存在同步副本,则会选出新的领导者,而消费者只会遇到几毫秒的延迟因为失败。
  • 场景2:现在您已了解复制,我相信您会发现此方案为场景1 ,复制因子为2

您可能也有兴趣了解制作人中的acks

在制作人中,您可以配置acks,以便在以下时间确认作品:

  • 将消息放在生产者的套接字缓冲区(acks=0
  • 邮件将写入主导经纪人的日志(acks=1
  • 邮件将写入主导代理的日志,并复制到所有其他同步副本(acks=all

此外,您可以配置提交产品所需的最小同步内副本数。然后,如果在给定此配置的情况下没有足够的同步副本,则产品将失败。您可以构建生成器以不同方式处理此故障:缓冲,重试,不执行任何操作,阻止等等。