Kafka入门-Kafka消费者的总结

写在前面:

  • 如果本篇博客中有错误的地方,还请各位博主指出。

消费的方式

消费者接收数据的时候,有两种方式可以选择:

  • Kafka往消费者推送消息,即推的方式去让消费者去处理数据。但是这种方式有一个问题,就是说如果每个消费者的处理数据的能力不同的话,那么将会导致生产大于消费的情况出现。如下图所示:
    在这里插入图片描述
  • 既然Kafka推送的方式不是很好,那么另一种方式就是又消费者去Kafka中去取数据,这样就可以避免了消费者消费水平不一致的问题,那么这种方式就没有问题了吗,答案是有的,就是当Kafka中没有数据的方式,消费者还来去取Kafka中的数据,这种方式都是无用的请求,因为并不能取出数据,针对这种问题,Kafka的消费者在消费时,可以传递一个timeout的参数,当Kafka中的没有数据的时候,那么此时消费者并不会立即返回,而是等待timeout的时间段之后才会返回。这种方式有点类似于Java锁中的自旋锁机制,如果此时我没有获取到数据的时候,并不会立刻的断开连接,而是选在继续等待。这种方式的示意图如下
    在这里插入图片描述
    Kakfa中采取的是第二种方式,即有消费者采用的方式去从Kafka中取数据。

消费者组的概念

消费者组是由一个或者多个消费者共同组成的一个组,这个组中的消费者需要遵循一下原则:
属于同一个消费者组中的消费者不能去消费同一个主题中同一个分区中的数据,这样有消费者组的概念,其实是为了提高消费者的消费能力,一个消费者组中的消费者可以同时消费同一主题中不同分区中的数据。可能这里有些人会有这样的疑问,就是说我同样也可以使用多个消费者去消费主题中不同分区中的数据,为啥还要用将这些消费者联系起来?我的理解是用组去连下这些消费者,目的是为了统一管理这些消费者,方便去管理同一主题下不同分区的数据的消费情况。

消费分区的策略

首先一个主题中有多个分区,并且一个消费者组中又有多个消费者,那么必然会牵扯到分区和消费者之间的分配问题。即消费分区的策略问题。
消费分区的策略主要包含了两种方式:

  • RoundRobin
    其实就是采用轮询的方式去将某一主题的分区发放给某一个消费者组中的消费者。如下图所示:
    在这里插入图片描述
  • Range
    该方式是先用分区数(M)对消费者组中的消费者的数目(N)进行取模运算,即M % N = V,如果V == 0,那么则将主题中的分区数按照顺序一次给每一个消费者发放M/N个分区,如下图所示:

在这里插入图片描述
如果V != 0,那么在签V个消费者中,每个消费者消费(M / N) + 1个分区,剩下的消费者消费(M / N)个分区,如下图所示:
在这里插入图片描述
首先kafka默认的是使用第二种分区方式,主要是第一种分区方式必须要满足一个条件,就是一个消费者组中的消费者一定是要消费的是同一个主题,如果同一消费者组中不同的消费者消费不同的主题,那么就会出现问题,如下图所示:
在这里插入图片描述
因此我们在选择对应的分区方式的时候,需要根据特定的情形去设置不同的分配方法,比如说,前提我们知道一个消费者组中的消费者们消费的是同一topic下的数据,那么此时就可以采用RoundRobin发放,否则就要使用Range方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值