当前位置: 首页 > 知识库问答 >
问题:

Apache Kafka主题分区消息处理

施德运
2023-03-14

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

假设我有8条消息M1到M8。现在当我的制作人将这些消息发送到主题T时,在以下场景下,Kafka经纪人将如何接收它们:

场景1:只有一个kafka broker实例具有前面提到的分区的主题T。

现在假设kafka broker实例1宕机,消费者会作何反应?我假设我的使用者正在读取broker实例1。

共有1个答案

秋阳旭
2023-03-14

我将通过引导您遍历分区复制来回答您的问题,因为您需要学习复制才能理解答案。

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

只有当消息已提交到所有同步副本时,使用者才可使用该消息。

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

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

直接回答您的问题:

    null

您还可能有兴趣了解生产者中的acks

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

  • 消息放在生产者的套接字缓冲区(acks=0)
  • 消息将写入牵头代理的日志(ACKS=1)
  • 消息将写入牵头代理的日志,并复制到所有其他同步副本(acks=all)
 类似资料:
  • 我已经在kafka上工作了相当长的六个月,我对用户延迟和存储到主题分区中的数据有一些疑问。 问题1:最初,当我开始阅读Kafka并了解如何使用Kafka的功能时,我被教导说,一个只有一部分和一个复制因子的主题会创造奇迹。经过相当长的六个月的工作,将我的项目迁移到live之后,使用我的主题消息的消费者开始给我一个延迟。我阅读了许多关于消费者延迟的堆栈溢出答案,得出结论,如果我增加某个主题的分区和复制

  • 我有一个带有4个分区的Kafka主题,因为我有一个带有4个消费者的消费者组。 我的目的是确保消息在分区之间均匀分布。 有没有办法验证kafka主题的跨分区消息分布?

  • 我对Kafka是新的,所以道歉,如果我听起来很愚蠢,但我目前所理解的是…消息流可以定义为主题,就像类别一样。并且每个主题被分成一个或多个分区(每个分区可以有多个副本)。所以它们是平行的 他们说Kafka的主要网站 生成器能够选择将哪个消息分配给主题中的哪个分区。这可以通过循环的方式简单地平衡负载,也可以根据某个语义分区函数(例如基于消息中的某个键)来完成。 在0.8 beta版中创建produce

  • 假设我有一个名为“MyTopic”的主题,它有3个分区P0、P1和P2。这些分区中的每一个都有一个leader,并且本主题的数据(消息)分布在这些分区中。 1.Producer将始终根据代理上的负载以循环方式写到分区的领导者。对吗? 2.制作人如何认识隔断的首领?

  • 我已经研究阿帕奇Kafka一段时间了。 让我们考虑下面的例子。 考虑到我有3个分区的主题。我只有一个生产者和一个消费者。我在生成消息时没有指定key属性。 所以我知道在生产者方面,当我发布一条消息时,kafka使用的策略是将消息分配给这两个分区中的任何一个。 现在,我想知道的是,当我开始一个属于某个消费者群体的消费者听同一主题时,它将使用什么策略来从不同的参与者(因为有3个)中提取信息? 它是否会

  • 我有一个KafkaStream应用程序,以前工作得很好。现在无论我用新的应用程序id重新启动它多少次,它都不会开始消耗主题,我收到了这个日志: 当我将“日志级别”设置为“调试”时,应用程序会生成以下日志: 没有分配任务,如日志所示: 这是日志中显示领导和成员信息的部分: 我有很多应用程序正在运行,他们现在都经历了这种情况。我试着制作新的连接器,但仍然没有成功。但我可以通过kafka console