kafka分不清消费者组和分区的概念

zy 发表于: 2017-12-04   最后更新时间: 2017-12-04 22:19:22   5,337 游览

在实际的运用当中会使用消费者组吗?感觉有点抽象

发表于 2017-12-04
zy
添加评论

一个topic有5个分区,里面有10条消息,这些消息以组为单位,发给每个组,比如其中一个组A里有5个消费者,那么5个消费者将平分这些消息。组B也会同样收到10条消息,组B内的消费者平分这10条。

zy -> 半兽人 6年前

同一个分组里面的消费者可以做负载均衡,比如一个组里面有两个消费者实例而且是一样的,将会收到不同的消息而不会重复消费吧?换句话说一个topic 里面的分区是存储的不同消息而非副本,这理解对吗?

半兽人 -> zy 6年前

Bingo。

開開新新 -> 半兽人 3年前

平分? 就是 5个消费者每个人都拿到不同的一份消息咯? 那么组内的消费者怎么保持数据一致性?
比如 我发10条消息 ( 今,天,的,天,气,非,常,不,错,啊),如果是平分,那么没有一个consumer能收到完整的一句话?

半兽人 -> 開開新新 3年前

数据一致性是什么意思?

如果你一个消费者组里,只有1个消费者,那这个消费者就自己消费完整的消息了。
可以参考这里,有2个模式的具体解释:https://www.orchome.com/5#item-7

開開新新 -> 半兽人 3年前

如果是多个分区,一个消费者那么肯定收到完整的消息。但是一个分区 多个消费者或是多个分区,多个消费者 这种情况一般如何处理的? 我说的消费者数据一致性,是每个消费者来自不同业务肯定都是需要一份完整的消息内容的,如果拿到的数据不完整,那业务怎么正常运行?

半兽人 -> 開開新新 3年前

消费者数 <= 分区数
一条一条的,一条消息等于一个业务,那就是完整的

開開新新 -> 半兽人 3年前

分区数和消费者的关系 我大概明白了。
我没理解的地方是,消费者组里的每个消费者之间怎么保持每个消费者数据都一致。

从消费者角度来看,如果是每个消费者只拿到其中一份数据,那这样就没意义了。
比如 A服务拿到的消息是(今 天 不 啊) B服务是(天 的 错) C服务是(气 非 常) ,这样拿到的消息 服务侧的用户看懂的吗?

我想每个消费者拿到自己的数据后,是否会和其他消费者交换? 最后拼凑为一份完整的消息。

半兽人 -> 開開新新 3年前

我在说一遍,假设总消息是10条,消费者组A收到10条,消费者组B也是收到完整10条。是按组的概念来决定的,那个链接已经解释的很清楚了。
每个组收到的是完整的数据。就这2种模式。

再来,”今天的天气非常不错啊“,这10条消息,你要求顺序拿到,说白了就是消息之间是有耦合关系的,要顺序消费,那么,你这个消费者组中就只能有1个消费者。
最后,你这种场景,极少数的,kafka大部分的场景,消息是无耦合的。

開開新新 -> 半兽人 3年前

感谢你的解答,你说的顺序消费只能有一个消费者,我懂了。
另外我解释下前面表达的方式不太对。 我一直在说的是consumer group里的consumer,不是consumer group。
既然你说这种场景不多,那我就不问了。

配合分区,更抽象了

你可以把分区当成队列,5个分区=5个队列,10条消息平均存储在5个队列中,组A里的5个消费者=5个队列。如果组里有6个消费者,那么就将有1个消费者永远拿不到消息。

你的答案

查看kafka相关的其他问题或提一个您自己的问题