了解Kafka主题和分区


甲基蓝
2025-03-23 02:22:33 (7天前)
  1. 我开始学习了


卡夫卡
</跨度>
用于企业解决方案。

在我的阅读中,我想到了一些问题:

当制作人正在制作一条消息时 - 它将指定它想要的主题

4 条回复
  1. 0# v-star*위위 | 2019-08-31 10-32



    让我们按顺序:)




    1 - 当生产者正在生成消息时 - 它将指定要将消息发送到的主题,是吗?它关心分区吗?




    默认情况下,生产者不关心分区。您可以选择使用自定义分区程序来获得更好的控制,但它完全是可选的。






    2 - 当订户正在运行时 - 它是否指定了其组ID,以便它可以是同一主题的消费者群集的一部分,或者是该群体消费者感兴趣的几个主题?




    是的,消费者加入(或创建,如果他们独自一人)一个消费者群体来共享负载。同一组中没有两个消费者会收到相同的消息。






    3 - 每个消费者组在代理上是否有相应的分区,或者每个消费者都有一个分区?




    都不是。在两个条件下,消费者组中的所有消费者都被分配了一组分区:同一组中没有两个消费者具有共同的任何分区 - 并且为每个现有分区分配整个消费者组。






    4 - 代理是否创建了分区,因此不关心消费者?




    它们不是,但你可以从3看到,拥有比现有分区更多的消费者是完全没用的,所以它是你消费的最大并行度水平。






    5 - 由于这是一个每个分区都有一个偏移量的队列,因此消费者有责任指定它想要读取的消息吗?是否需要保存其状态?




    是的,消费者为每个分区保留每个主题的偏移量。这完全由卡夫卡处理,不用担心。






    6 - 从队列中删除邮件时会发生什么? - 例如:保留时间为3小时,然后时间过去了,两侧的偏移量如何处理?




    如果消费者曾经请求代理上的分区不可用的偏移量(例如,由于删除),则它进入错误模式,并最终将此分区的自身重置为可用的最新消息或最旧消息(取决于auto.offset.reset配置值),并继续工作。


  2. 1# 记忆只剩空城 | 2019-08-31 10-32




    这篇文章已经有了答案,但我在Kafka权威指南中添加了几张图片




    在回答每个问题之前,让我们添加生产者组件的概述
    </强>








    1.当一个制作人正在制作一条消息时 - 它会指定它想要发送消息的主题,是吗?它关心分区吗?




    生产者将决定目标分区放置任何消息取决于




    • 分区ID,如果用消息指定的话



    • key%num分区
      </强>
      ,如果没有提到分区ID


    • 循环赛,如果两者都没有

      分区ID
      </强>
      也不

      消息密钥
      </强>
      在消息中可用,仅表示值




    2.当订阅者正在运行时 - 它是否指定了其组ID,以便它可以是同一主题的消费者群集的一部分,或者是该群体消费者感兴趣的几个主题?




    你应该总是配置

    group.id
    </强>
    除非您使用简单的赋值API,否则您不需要在Kafka中存储偏移量。它不会成为任何团体的一部分。

    资源




    3.每个消费者组在代理上是否有相应的分区,或者每个消费者都有一个分区?





    在一个使用者组中,每个分区仅由一个使用者处理
    </强>
    。这些是可能的情况




    • 消费者数量

      少于
      </强>
      然后,可以将多个分区分配给组中的一个使用者

      1. <img src =“https://i.stack.imgur.com/zq0Mz.png”alt =“消费者数量少于主题分区”/>
      2. </LI>
      3. <LI>
      4. 消费者数量
      5. <strong>
      6. 相同
      7. </强>
      8. 作为主题分区的数量,那么分区和消费者映射可以如下所示,
      9. <img src =“https://i.stack.imgur.com/qw3MC.png”alt =“消费者数量与主题分区数量相同”/>
      10. </LI>
      11. <LI>
      12. 消费者数量
      13. <strong>
      14. 多于
      15. </强>
      16. 主题分区的数量,然后分区和消费者映射可以如下,
      17. <EM>
      18. 无效,请查看消费者5
      19. </EM>
      20. <img src =“https://i.stack.imgur.com/jXcjI.png”alt =“超过主题分区数的消费者数”/>
      21. </LI>




    4.作为经纪人创建的分区,因此不关心消费者?





    消费者应该意识到
    </强>
    我们在问题3中讨论过的分区数量。




    5.由于这是一个每个分区都有一个偏移量的队列,因此消费者有责任指定它想要读取哪些消息吗?是否需要保存其状态?




    卡夫卡(具体而言

    集团协调员
    </强>
    )通过向内部生成消息来处理偏移状态


    __consumer_offsets

    </强>
    主题,此行为也可以配置为手动

    enable.auto.commit



    false

    。在这种情况下

    consumer.commitSync()



    consumer.commitAsync()

    可以帮助管理偏移量。



    更多关于

    集团协调员
    </强>




    1. 它是Kafka服务器端集群中的一个选举代理。


    2. 消费者与组协调器交互以进行偏移提交和获取请求。


    3. 消费者向组协调员发送定期心跳。

    4. </醇>


      6.从队列中删除邮件时会发生什么? - 例如:保留时间为3小时,然后时间过去了,两侧的偏移量如何处理?




      如果任何消费者在保留期后启动,则将根据消费消费

      auto.offset.reset
      配置可能是

      latest/earliest

      。技术上它是

      latest

      (开始处理新消息)因为所有消息都在那个时间到期了

      保留

      是主题级别配置。


  3. 2# 一腔诗意喂了狗 | 2019-08-31 10-32



    卡夫卡使用

    话题

    将命令带入信息流的概念。



    为了平衡负载,可以将主题划分为多个分区并在代理之间进行复制。



    分区是有序的,不可变的消息序列,它们连续地附加,即提交日志。



    分区中的消息具有序列标识号,该标识号唯一标识分区中的每条消息。



    分区允许主题“日志”扩展到超出适合单个服务器(代理)的大小,并作为并行单元。



    主题的分区分布在Kafka集群中的代理上,其中每个代理处理数据并请求分区的共享。



    每个分区都在可配置数量的代理上进行复制,以确保容错。



    在这篇文章中解释得很好:

    http://codeflex.co/what-is-apache-kafka/


登录 后才能参与评论