Kafka-消费及分区

消费方式:

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

      push(推)模式很难使用消费速率得不同得消费者,这种方式可以尽快得速度传递消息,但是这样子很容易创造成了consumer来不及处理消息,也就是拒绝服务导致网络阻塞,而pull模式却可以根据consumer得消费能力一适当得速率消费消息。

    pull(拉)模式得不足之处是,如果kafka没有数据,消费者可能陷入循环中,一直返回空数据,针对于这一点,kafka得消费者再消费数据时候,会传入以时长参数timeout,如果再没有数据可供消费,consumer会等待一段时间之后再返回,这段时间即为timeout。

分区分配策略

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

      kafka有两个分配策略,,一个是roundRobin(hash分配-轮询),一个是range(范围话分配  默认)

RoundRobin(轮询)

     只能保证同一个消费者组里面的所有消费者消费的主题都是相同的。

     采用Hash得方式进行分配,问题在于每当消费者删除或者新增,都需要重新分配划分分区信息,而且进行业务话定制的时候,无法实现指定消费的规则和条件。除非所有的消费者(同一个消费组),消费的topic都是一样子的(不同分区的)才可以。他当做所有的消费者组组成了一个整体话分配,分配较为均匀。

Range(轮询)

       按照区块范围划分,是系统的默认消费方式,会存在消费者消费的不均匀问题,分配的差距可能会存在很大,造成conumer消费分区的不协调和不均匀。

Offset

       由于consumer再消费过程中可能会存在段点当即等故障,consumer回复后,需要从故障钱的为只继续消费,所有consumer 需要试试记录自己消费到哪个offset,以便故障恢复后继续消费。

消费者组

如何决定一个offset值得定义?

       消费者组+Partition编号+topic名称,可以确定决定一个offset得名称或者标识,可以方便我们客户端或者kafka本身去获取相对得相关信息offset数值。

再之前版本(0.9):存放zk中存放再znode中

再之后版本(1.1):存放本地文件_consumer_offsets文件中存放。

修改配置文件consumer.properties文件:exclude.internal.topics=false

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容