美文网首页
Kafka-消费及分区

Kafka-消费及分区

作者: 洛神灬殇 | 来源:发表于2019-11-18 11:57 被阅读0次

    消费方式:

    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

    相关文章

      网友评论

          本文标题:Kafka-消费及分区

          本文链接:https://www.haomeiwen.com/subject/wqaubctx.html