Apache Kafka主题分区消息处理

Apache Kafka Topic Partition Message Handling

我对Apache Kafka中的Topic分区有些困惑。因此,我正在制定一个简单的用例,我想知道在不同情况下会发生什么。所以这里是:

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

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

方案1:只有一个具有主题T和上述分区的kafka代理实例。

场景2:有两个kafka代理实例,每个节点具有相同的Topic T,且具有上述分区。

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


我将通过引导您完成分区复制来回答您的问题,因为您需要了解有关复制的知识才能理解答案。

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

仅当已将消息提交给所有同步副本时,该消息才可供使用者使用。

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

如果该主题没有配置副本,那么当给定分区的领导者出现故障时,除非成为领导者的经纪人重新联机,否则消费者无法从该分区进行消费。或者,如果永不恢复联机,则先前生成到该分区的数据将永远丢失。

直接回答您的问题:

  • 方案1:如果为该主题配置了复制,并且每个分区都存在一个同步副本,则将选举一个新的领导者,并且由于故障,使用者将仅经历几毫秒的延迟。
  • 方案2:既然您了解复制,我相信您会看到此方案是方案1,复制因子为2

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

在生产者中,您可以配置acks,以便在以下情况下确认生产:

  • 消息被放在生产者的套接字缓冲区(acks=0)上
  • 该消息被写入潜在客户经纪人的日志(acks=1)
  • 该消息被写入主要经纪人的日志,并复制到所有其他同步副本(acks=all)

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