Kafka学习之路(三)生产者&消费者实战

1、创建一个topic (名字为first1,并设置一个副本,一个分区)

kafka-topics.sh \--create \--zookeeper shouhou153:2181,shouhou155:2181,shouhou156:2181 \--replication-factor 1 \--partitions 1 \--topic first

2、启动producer和两个consumer

生产者

kafka-console-producer.sh \--broker-list shouhou153:9092 \--topic first1

消费者

kafka-console-consumer.sh \--bootstrap-server shouhou153:9092 \--topic first1

在这里插入图片描述

可以看到两个消费者都可以消费到同一个topic里的数据

消费时可以加 --from-beginning 作用是的作用是使consumer从kafka最早的消息开始消费

这时我将两个consumer关闭掉,在起一个,加上–from-beginning参数

kafka-console-consumer.sh \--bootstrap-server shouhou153:9092 \--topic first1 \--from-beginning

可以看到会从该topic最早的消息开始消费
在这里插入图片描述

通过kafka的监控页面查看
在这里插入图片描述
在这里插入图片描述

topic:创建时topic名称
partition:分区编号
offset:表示该parition已经消费了多少条message
logSize:表示该partition已经写了多少条message
Lag:表示有多少条message没有被消费。
Owner:表示消费者
Created:该partition创建时间
Last Seen:消费状态刷新最新时间。

点击first1可以查看该Consumer当前的消费状况
在这里插入图片描述
这张图片的左上角显示了当前Topic的生产速率,右上角显示了当前Consumer的消费速率。
   图片中还有三种颜色的线条,蓝色的表示当前Topic中的Message数目,灰色的表示当前Consumer消费的offset位置,红色的表示蓝色灰色的差值,即当前Consumer滞后于Producer的message数目。

参考:链接

3、消费者组

1. 一个消费者只能属于一个消费者组
2. kafka同一个gruopid下多个consumer订阅同一个topic,只有一个consumer能消费到数据(前提是只有一个分区)
3. 不同消费者组中的消费者可以消费同一个topic

案例: 创建一个topic名为test,并设置一个partition, 启动两个consumer同时订阅topic “test” ;groupid都为test1;producter向test发送10条数据,结果全部数据都被一个consumer接收到了,另外一个consumer没有接受到任何数据;
原因:如果topic存到了几个partitions里面,那么一个partitions只会被一个consumer消费(为了保证消息的顺序),如果test的partitions数量为1 ,那么只会有一个consumer能消费

一、消费者的数量大于分区的数量

1、创建一个名为test的topic,并指定一个分区

./kafka-topics.sh \--create \--zookeeper shouhou153:2181 \--replication-factor 2 \--partitions 1 \--topic mytest

2、创建生产者向mytest生产数据

./kafka-console-producer.sh \--broker-list shouhou153:9092 \--topic mytest

3、创建两个消费者,并指定同一个groupid (group.id=group_mytest)

bin/kafka-console-consumer.sh \--bootstrap-server shouhou153:9092 \--topic mytest \--consumer-property group.id=group_mytest

此时分区数是1,消费者是2,消费者的数据大于分区的数量
使用生产者生产数据,可以得到两个消费者消费数据的情况,如下:
在这里插入图片描述
这说明:同一个分区内的消息只能被同一个组中的一个消费者消费,当消费者数量多于分区数量时,多于的消费者空闲(不能消费数据)。

二、消费者少于和等于分区数

1、创建一个三分区的topic mytest2

./kafka-topics.sh \--create \--zookeeper shouhou153:2181 \--replication-factor 1 \--partitions 3 \--topic mytest2

2、在刚刚的group中启动两个消费者,查看消费情况

./kafka-console-consumer.sh \--bootstrap-server shouhou153:9092 \--topic mytest2 \--consumer-property group.id=group_mytest

在这里插入图片描述这说明:当分区数多于消费者数的时候,同一个组内有的消费者对应多个分区

3、启动三个消费者,再次查看消费情况
在这里插入图片描述
可以看到,生产的数据被均匀的分配到了三个消费者上。这说明:当分区数等于消费者数的时候,每个消费者对应一个分区。

三、多个消费者组

再创建一个新的消费者组 group.id=group_mytest2,使用两个消费者组对mytest进行消费

窗口1生产者:./kafka-console-producer.sh \--broker-list shouhou153:9092 \--topic mytest 
窗口二消费者组1:./kafka-console-consumer.sh \--bootstrap-server shouhou153:9092 \--topic mytest \--consumer-property group.id=group_mytest 
窗口三消费者组2:./kafka-console-consumer.sh \--bootstrap-server shouhou153:9092 \--topic mytest \--consumer-property group.id=group_mytest2

在这里插入图片描述
从上图看一看到,生产者生产的数据,两个在、消费组都可以消费的到,这说明启动多个组,相同的数据会被不同组的消费者消费多次

参考:链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怒上王者

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值