加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜新站长网 (https://www.0418zz.com.cn/)- 管理运维、AI硬件、数据集成、云备份、负载均衡!
当前位置: 首页 > 站长资讯 > 动态 > 正文

无线领域重要的事情可能不是5G

发布时间:2021-02-18 14:53:03 所属栏目:动态 来源:互联网
导读:Range 算法并不会把多个主题分区当成一个整体。 从上面的例子我们可以总结出Range算法的一个弊端:那就是同一个消费者组内的消费者消费的消息数量相差可能较大。 4.3 offset 的维护 由于 consumer 在消费过程中可能会出现断电宕机等故障,consumer 恢复后,

Range 算法并不会把多个主题分区当成一个整体。

从上面的例子我们可以总结出Range算法的一个弊端:那就是同一个消费者组内的消费者消费的消息数量相差可能较大。

4.3 offset 的维护

由于 consumer 在消费过程中可能会出现断电宕机等故障,consumer 恢复后,需要从故障前的位置继续消费,所以 consumer 需要实时记录自己消费到了哪个 offset,以便故障恢复后继续消费。

Kafka 0.9 版本之前,consumer 默认将 offset 保存在 Zookeeper 中,从 0.9 版本开始,consumer 默认将 offset保存在 Kafka 一个内置的 topic 中,该 topic 为 _consumer_offsets。


 

这种情况下,采用 RoundRobin 算法分配,多个主题会被当做一个整体来看,这个整体包含了各自的 Partition,比如在 Kafka-clients 依赖中,与之对应的对象为 TopicPartition。接着将这些 TopicPartition 根据其哈希值进行排序,排序后采用轮询的方式分配给消费者。

但这会带来一个问题:假如上图中的消费者组中,ConsumerA 只订阅了 TopicA 主题,ConsumerB 只订阅了TopicB 主题,采用 RoundRobin 轮询算法后,可能会出现 ConsumerA 消费了 TopicB 主题分区里的消息,ConsumerB 消费了 TopicA 主题分区里的消息。

综上所述,RoundRobin 算法只适用于消费者组中消费者订阅的主题相同的情况。同时会发现,采用 RoundRobin 算法,消费者组里的消费者之间消费的消息个数最多相差 1 个。

Range

Kafka 默认采用 Range 分配策略,Range 顾名思义就是按范围划分的意思。

比如现在有一个三个消费者 ConsumerA、ConsumerB 和 ConsumerC 组成的消费者组,同时消费 TopicA 主题消息,TopicA分为7个分区,如果采用 Range 分配策略,过程如下所示:


 

消费者是以 consumer group 消费者组的方式工作,由一个或者多个消费者组成一个组, 共同消费一个 topic。每个分区在同一时间只能由 group 中的一个消费者读取,但是多个 group 可以同时消费这个 partition。在图中,有一个由三个消费者组成的 group,有一个消费者读取主题中的两个分区,另外两个分别读取一个分区。某个消费者读取某个分区,也可以叫做某个消费者是某个分区的拥有者。

在这种情况下,消费者可以通过水平扩展的方式同时读取大量的消息。另外,如果一个消费者失败了,那么其他的 group 成员会自动负载均衡读取之前失败的消费者读取的分区。

消费者组最为重要的一个功能是实现广播与单播的功能。一个消费者组可以确保其所订阅的 Topic 的每个分区只能被从属于该消费者组中的唯一一个消费者所消费;如果不同的消费者组订阅了同一个 Topic,那么这些消费者组之间是彼此独立的,不会受到相互的干扰。

如果我们希望一条消息可以被多个消费者所消费,那么可以将这些消费者放到不同的消费者组中,这实际上就是广播的效果;如果希望一条消息只能被一个消费者所消费,那么可以将这些消费者放到同一个消费者组中,这实际上就是单播的效果。

4.2 分区分配策略

一个 consumer group 中有多个 consumer,一个 topic 有多个 partition,所以必然会涉及到 partition 的分配问题,即确定哪个 partition 由哪个 consumer 来消费。

Kafka 有两种分配策略,一是 RoundRobin,一是 Range。

RoundRobin

RoundRobin 即轮询的意思,比如现在有一个三个消费者 ConsumerA、ConsumerB 和 ConsumerC 组成的消费者组,同时消费 TopicA 主题消息,TopicA 分为 7 个分区,如果采用 RoundRobin 分配策略,过程如下所示:



(编辑:阜新站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读