Apache kafka ApacheKafka主题分区消息处理

Apache kafka ApacheKafka主题分区消息处理,apache-kafka,Apache Kafka,我对ApacheKafka中的主题划分有点困惑。所以我正在绘制一个简单的用例图,我想知道在不同的场景中会发生什么。这就是: 我有一个主题T,它有4个分区TP1、TP2、TP4和TP4 假设我有8条消息M1到M8。现在,当我的制作人将这些消息发送到主题T时,在以下情况下,Kafka代理将如何接收这些消息: 场景1:只有一个kafka broker实例的主题T包含上述分区 场景2:有两个kafka broker实例,每个节点都具有与上述分区相同的主题T 现在假设kafka broker实例1失败,消

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

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

假设我有8条消息M1到M8。现在,当我的制作人将这些消息发送到主题T时,在以下情况下,Kafka代理将如何接收这些消息:

场景1:只有一个kafka broker实例的主题T包含上述分区

场景2:有两个kafka broker实例,每个节点都具有与上述分区相同的主题T


现在假设kafka broker实例1失败,消费者将如何反应?我假设我的消费者正在阅读broker实例1。

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

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

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

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

如果主题配置为没有副本,那么当给定分区的前导出现故障时,使用者无法使用该分区,直到作为前导的代理重新联机。或者,如果它从未恢复联机,以前生成到该分区的数据将永远丢失

要直接回答您的问题:

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

您也可能有兴趣在producer中了解
acks

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

  • 消息被放入生产者的套接字缓冲区(
    acks=0
  • 消息将写入首席代理的日志(
    acks=1
  • 消息将写入牵头代理的日志,并复制到所有其他同步副本(
    acks=all

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

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

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

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

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

如果主题配置为没有副本,那么当给定分区的前导出现故障时,使用者无法使用该分区,直到作为前导的代理重新联机。或者,如果它从未恢复联机,以前生成到该分区的数据将永远丢失

要直接回答您的问题:

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

您也可能有兴趣在producer中了解
acks

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

  • 消息被放入生产者的套接字缓冲区(
    acks=0
  • 消息将写入首席代理的日志(
    acks=1
  • 消息将写入牵头代理的日志,并复制到所有其他同步副本(
    acks=all
此外,您可以配置提交产品所需的最小同步副本数。然后,在