kafka 学习笔记 4 - Topic 和分区

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值