Kafka消费者

  • 消费方式

consumer采用pull(拉)模式从broker中读取数据。

push(推)模式优点:消息传递速度快;缺点:消息发送者主动发送数据,消息接收者被动接收消息,很难适应消费速率不同的消费者。很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。

pull模式优点:可以根据consumer的消费能力以适当的速率消费消息;缺点:如果kafka没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka的消费者在消费数据时会传入一个时长参数timeout,如果当前没有数据可供消费,consumer会等待一段时间之后再返回,这段时长即为timeout。

  • 分区分配策略

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

Kafka有两种分配策略,一是roundrobin,一是range。kafka默认采用roundrobin

roundrobin:即轮询,把partition分别依次发往cousumer。例如partition有(1,2,3,4,5,6,7),consumer有(A,B,C),则分配方式为    A(1,4,7);B(2,5);C(3,6),如果还有其他topic分区,依然如此分配,consumer中最多差一个。分配比较均匀

range:即分块,把partition分块分别发往cousumer。例如partition有(1,2,3,4,5,6,7),consumer有(A,B,C),则分配可能为  (3,2,2)即  A(1,2,3);B(4,5);C(6,7),但是,当多个topic分区时,依然如此分配,则A中每次都会分到三个分区,会导致数据倾斜,分配不均。

  • offset的维护

    由于consumer在消费过程中可能会出现断电宕机等故障,consumer恢复后,需要从故障前的位置的继续消费,所以consumer需要实时记录自己消费到了哪个offset,以便故障恢复后继续消费。Kafka 0.9版本之前,consumer默认将offset保存在Zookeeper中,从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic中,该topic为__consumer_offsets

  • Kafka 高效读写数据

  • 顺序写磁盘

      Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到到600M/s,而随机写只有100k/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。

  • 零拷贝技术

零拷贝并不是不拷贝

传统将文件发送出去需要四次拷贝

1、第一次:将磁盘文件,读取到操作系统内核缓冲区;
2、第二次:将内核缓冲区的数据,copy到application应用程序的buffer;
3、第三步:将application应用程序buffer中的数据,copy到socket网络发送缓冲区(属于操作系统内核的缓冲区);
4、第四次:将socket buffer的数据,copy到网卡,由网卡进行网络传输。
kafka则只用到了第一,第四次拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值