美文网首页
kafka 学习笔记 4 - Topic 和分区

kafka 学习笔记 4 - Topic 和分区

作者: 张云飞Vir | 来源:发表于2021-07-19 12:54 被阅读0次

    1. 背景

    本节讨论下 kafka的分区。

    2.知识

    先理解下 kafka 的 topic 和分区的基本概念。

    Topic 就是 主题,是 数据记录集 发布的地方, 可以用来区分业务系统。

    Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。

    Partition(分区):对于每一个topic, Kafka集群都会维持一个分区(Partition),如下所示:

    offset(偏移位置):分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offset,offset用来唯一的标识分区中每一条记录。

    分区

    存活期限 (retention period)
    Kafka 集群保留所有发布的记录(无论他们是否已被消费),并通过一个可配置的存活期限来控制.。比如, 如果存活策略设置为2天,一条记录发布后2天内,可以随时被消费,两天过后这条记录会被抛弃并释放磁盘空间。

    分布式

    • 分区 可以分布 在Kafka集群的不同服务器上。
    • 每个分区都有一台 server 作为 “leader”,零台或者多台server作为 follwers 。
    • 当leader宕机了,followers 中的一台服务器会自动成为新的 leader。

    对于同一个消费组中,一个partition至多被一个消费者消费

    3. 示例验证

    由此我决定做一些验证分区个数不同的情况。

    3.1 场景1:单个kafka服务,1个分区

    使用相同 消费组 的两个实例访问时:
    这时,开启单个 消费者实例(进程)进行消费时,可以正常消费。
    当再次启动 第二个消费者时,第二个消费者无法消费kafka。

    使用不同 消费组 的两个实例访问时:
    这时,开启单个 消费者实例(进程)进行消费时,可以正常消费。
    启动 第二个消费者时,第二个消费者 也可是消费,收到的消息和 第一个消费者相同。相当于 “两个人收到的是一模一样的”,类似于“广播”。

    总结
    不同的消费组进行消费时,其实是 广播 机制,各人消费的内容都是相同的,kafka 为不同的消费组发送“相同的消息副本”。

    3.1 场景2:单个kafka服务,2个分区

    使用相同 消费组 的两个实例访问时:
    (1) 启动 第一个 消费者时,它被分别了 两个分区,控制台输入如下;

    myGroup1: partitions assigned: [topic2-1, topic2-0]
    

    (2) 当第二个消费者启动后,导致第一个消费者被分配的分区发生了变化。打印日志:

    myGroup1: partitions assigned: [topic2-1]
    

    第二消费者打印日志如下,它被分配到一个分区。

    myGroup1: partitions assigned: [topic2-0]
    

    总结
    如果你期望一个消费组下的“多个消费者” 达到 “并行消费”,那么,至少为你的 消费者实例 准备好多个分区。由于 对于同一个消费组中,一个partition至多被一个消费者消费,只有“多个分区” 才能达到“一个消费者至少被分配一个分区”。

    4. 扩展

    我的代码示例:https://github.com/vir56k/java_demo/tree/master/kafka_demo1/kafka_demo2

    END

    相关文章

      网友评论

          本文标题:kafka 学习笔记 4 - Topic 和分区

          本文链接:https://www.haomeiwen.com/subject/cvyzpltx.html