首页 文章

Apache Kafka主题分区消息处理

提问于
浏览
0

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

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

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

场景1:只有一个kafka代理实例具有Topic T和前面提到的分区 .

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

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

1 回答

  • 3

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

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

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

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

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

    直接回答你的问题:

    • Scenario 1: 如果为主题配置了复制,并且每个分区都存在同步副本,则会选出新的领导者,并且由于失败,消费者只会遇到几毫秒的延迟 .

    • Scenario 2: 现在您已了解复制,我相信您会看到此方案为 Scenario 1 ,复制因子为 2 .


    您可能也有兴趣了解 生产环境 者中的 acks .

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

    • 消息放在 生产环境 者的套接字缓冲区( acks=0

    • 消息被写入主导经纪人的日志( acks=1

    • 消息将写入前导代理的日志,并复制到所有其他同步副本( acks=all

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

相关问题