Kafka知识点记录

Kafka知识点记录

  • consumer订阅topic之后,当consumer调用poll(Long)方法的时候,会自动加入消费者组,然后Kafka为consumer分配partition,接着Kafka将partion中的消息发送给consumer,consumer接收partition中的消息,提交offset。

  • partition中的消息都有一个offset,offset是patition中消息的唯一标识符,它还表示consumer在partition中的位置。eg.如果提交的offset=5,表示consumer将接收offset=5的消息,offset=1,2,3,4的消息都认为已被消费。

  • 管理offset的两种方式:
    – 自动提交offset
    需要指定enable.auto.commit=true ,consumer调用poll(Long)方法,消息返回给用户时,消息被认为已消费,提交的offset=返回的最后一条消息的offset+1,consumer将会接收提交的offset的消息。
    – 手动提交offset
    手动提交offset与自动提交offset不同,需要指定enable.auto.commit=false,消息返回给用户时,消息此时不被认为已消费,也不会提交offset。想要提交offset需要调用commitSync或者commitAsync。

  • 有相同group.id的consumer属于同一消费者组,消费者组中的consumer会被均衡分配partition,partition只会分配给同一消费者组中的一个consumer。
    假设一个topic有8个partition,有一个消费者组,这个消费者组有4个consumer。那么一个consumer会有2个partition。
    eg.假如消费者组的1个consumer出问题,比如crash,分区会被重新分配,其中2个consumer分别有3个partition,另一个consumer有2个partition
    eg.假如消费者组新增4个consumer,分区会被重新分配,每个consumer有1个partition。
    eg.假如消费者组新增5个consumer,分区会被重新分配,其中4个consumer分别有1个partition,另一个consumer不会被分配partition。
    eg.假如新增一个消费者组,这个消费者组有4个consumer,分区会被重新分配,每个消费者组中的每个consumer会有1个partition。

  • ConsumerRecords:
    获取给定topic中的消息
    获取给定partition中的消息
    获取给定消息集中消息所在的partition

你可能感兴趣的:(大数据,kafka)