首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kafka技术内幕之Comsumer概述

本篇我们将从使用者的简单分析一下消费者,消费者组等概念

一. 消费者组与消费者

我们在客户端消费消息的时候,需要指定消费者组,参数为group.id。消费者组就是一组消费者,即消费者组是由消费者组成。

1. 一个分区只可被消费者组中的一个消费者所消费

我们还用之前的beardata主题,beardata有两个分区p0,p1。我们在控制台启动两个消费者,都在消费组beardata_group中;在代码中我们指定的消费组为beardata,打印偏移量,分区信息。可以看出控制台的两个消费者所消费的消息是互斥的,即左边消费者消费的是分区p1的数据,右边消费的是分区p0的数据。

为了进一步的验证这个结论,我们将代码中的消费组改为beardata_group,即和控制台的消费组一样,我们看看结果。

可以看出,代码中的消费者没有输出数据,而控制台消费者都输出了互斥的消息。

这再一次说明了一个分区只可被消费者组中的一个消费者所消费。

广播:一个分区被不同消费组里的消费者消费,发布-订阅模式

单播:每个分区都由不同的消费者消费,队列模式

2. 消费组再平衡

(1)新的消费者加入消费者组

当有新的消费者加入同一个消费组的时候,消费者组会发生再平衡。刚开始我们先启动一个控制台消费者,发送想10条消息,则消息全部被该消费者消费。之后我们启动另外一个消费者,发送10条消息,发现两个消费者都平均消费了消息。

(2)消费者退出消费者组

当有消费者退出消费者组时,消费者也会发生再平衡。刚开始我们先启动两个消费者,发送10跳消息,则消息被均匀的发给消费者。之后我们将其中一个消费者kill,重新发送10条消息,发现另一个消费者消费了全部的消息。

3. 分区与消费者

beardata有两个分区,分别为p0,p1,消费者组为beardata_group

(1)线程数多余分区的数量,有部分线程无法消费该主题下任何一条消息

我们在同一个消费者组下面启动三个消费者,消费beradata,发送10条消息,我们可以看到消息只被两个消费者消费,第三个消费者没有消费消息

(2)线程数少于分区数量,有一些线程会消费多个分区的数据

我们在同一个消费者组下面启动一个消费者,消费beradata,发送10条消息,我们可以看到消息全部被该消费者所消费

(3)线程数等于分区数量,正好一个线程消费一个分区的数据

我们启动两个消费者,消费beardata,发送10条消息,我们可以看到消息均匀的被两个消费者所消费

通过上述的验证,我们还可以得出一个结论,每个分区上消息的顺序是一致的,但是不同分区上的消息顺序是不一致的。

二. 消费者消费的几种方式

1. 自动提交偏移量,在前面的例子中我们使用的就是该方式

2. 手动控制偏移量

3. 手动提交偏移量第二种方式,控制TopicPartition

4. Assign方式订阅主题,控制消费的partition

本篇我们对Kafka Consumer进行了简单的介绍,下一篇我们将介绍KafkaComsumer流程。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181017G1HQMX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券