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

理解Kafka的主题和分区

荆修明
2023-03-14

我开始学习Kafka用于企业解决方案

在我阅读的过程中,我脑海中浮现出一些问题:

>

  • 当一个生产者正在生成一个消息--它会指定它想要将消息发送到的主题,是这样吗?它关心分区吗?
  • 当订阅服务器运行时-它是否指定其组id,以便它可以是同一主题的使用者集群的一部分,或者是该组使用者感兴趣的几个主题的一部分?
  • 每个消费者组在代理上有一个对应的分区还是每个消费者都有一个?

    分区是由代理创建的,因此不是消费者关心的问题吗?

    由于这是一个队列,每个分区都有一个偏移量,那么使用者是否有责任指定它要读取哪些消息呢?它需要保存它的状态吗?

    从队列中删除消息时会发生什么?--例如:保留了3个小时,然后时间过去了,两边的偏置是怎么处理的?

  • 共有1个答案

    柯甫
    2023-03-14

    在回答每个问题之前,让我们添加一个生产者组件的概述:

    生产者将决定放置任何消息的目标分区,具体取决于:

    • 分区id,如果在消息中指定了它
    • 键%num分区,如果未提及分区id
    • 如果消息中分区id和消息键都不可用,则循环执行,表示只有值可用

    您应该始终配置group.id,除非您使用的是简单赋值API,并且不需要在Kafka中存储偏移量。它不会是任何团体的一部分。来源

    在一个使用者组中,每个分区将只由一个使用者处理。这些是可能的情况

    • 使用者数量少于主题分区数量,则可以将多个分区分配给
    • 组中的一个使用者
    • 使用者的数量与主题分区的数量相同,则分区和使用者映射可以如下所示,
    • 使用者数量高于主题分区数量,则分区和使用者映射如下所示,无效,请检查consumer 5

    使用者应该知道分区的数量,如问题3中所讨论的。

    Kafka(作为特定的组协调器)通过向内部__consumer_offsets主题生成消息来处理偏移量状态,通过将enable.auto.commit设置为false也可以将此行为配置为manual。在这种情况下,consumer.commitSync()consumer.commitAsync()可能有助于管理偏移量。

    有关组协调员得详细信息:

    1. 它是群集中从Kafka服务器端选出的代理之一。
    2. 使用者与组协调器交互,以获取偏移量提交和提取请求。
    3. 使用者将定期心跳发送给组协调器。

    如果任何使用者在保留期后启动,消息将按照auto.offset.reset配置使用,该配置可能是最新/最早。从技术上讲,它是最新的(开始处理新消息),因为到那时所有消息都过期了,并且保留是主题级配置。

     类似资料:
    • Kafka主题分区偏移位置始终从0或随机值开始,如何确保使用者记录是分区中的第一条记录?有没有办法找出答案?如果有的话,请让我知道。谢谢。

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

    • 我有一个主题T,它有4个分区TP1、TP2、TP4和TP4。 假设我有8条消息M1到M8。现在当我的制作人将这些消息发送到主题T时,在以下场景下,Kafka经纪人将如何接收它们: 场景1:只有一个kafka broker实例具有前面提到的分区的主题T。 现在假设kafka broker实例1宕机,消费者会作何反应?我假设我的使用者正在读取broker实例1。

    • 简单问题: 假设我有一个具有3个分区的主题:Topic:StateEvents P1、P2和P3。 让我们假设生产者生成20条消息: 1, 2, 3, ..........20 我的问题是: 当制作人生成这些消息时: 1)每个消息将只在且仅在1个分区?也就是说,1在P1,2在P2,3在P3,然后4在P1,5在P2,6在P3,以此类推? 2)如果#1为真,当消费者订阅时,它将订阅所有分区,以便获得所

    • 我正在学习Kafka,并试图为我最近的搜索应用程序创建一个主题。被推送到Kafka主题的数据被认为是一个很高的数字。 我的kafka集群有3个代理,并且已经为其他要求创建了主题。 现在,我应该为最近的搜索主题选择多少个分区?如果我没有明确提供分区号呢?选择分区号时需要考虑哪些事项?