消费方式:
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
网友评论