Apache Kafka主题分区消息处理

spa*_*rkr 0 apache-kafka

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

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

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

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

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

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

ale*_*lod 5

我将通过逐步进行分区复制来回答您的问题,因为您需要了解复制才能理解答案。

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

仅在将消息提交到所有同步副本后,该消息才对使用者可用。

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

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

要直接回答您的问题:

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

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

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

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

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