【Kafka学习-4】消费者相关

本文整理自尚硅谷kafka3.0教程,介绍了Kafka消费流程,包括pull消费方式、轮询读取及相关参数;阐述了消费者组的概念、初始化和分区策略;说明了Offset的提交方式和意义;还提及消费调优,如重复/漏消费的情况及解决办法、数据积压的原因和对策。

本文内容整理自尚硅谷kafka3.0教程

Kafka消费流程

  • Kafka消费方式 pull

    • 消费者主动从broker拉取数据,便于各个消费者按照自己的消费速度拿取数据
  • 轮询读取 consumer.poll()

    • 每个一段时间分批获取 填入的参数是最长等待时间
      • Fetch.min.bytes 每批次最小抓取大小, 默认1字节
      • fetch.max.wait.ms 一批数据最小值未达到的超时时间, 默认500ms
      • Fetch.max.bytes 每批次最大抓取大小, 默认50m
      • Max.poll.records 一次拉取数据返回消息的最大条数, 默认500条
  • 偏移量 offset

    • 消费者通过offset读取log文件中对应的数据
    • 消费者将offset请求提交给broker,由系统主题_consumer_offsets保存

Kafka消费者组

  • 消费者组由多个消费者组成

    • 形成一个消费者组的条件, 是所有消费者的groupid相同。
    • 消费者组内每个消费者负责消费不同分区的数据, 一个分区只能由一个组内消费者消费。
    • 消费者组之间互不影响。 所有的消费者都属于某个消费者组, 消费者组是逻辑上的一个订阅者。
    • 消费组中消费者数量超过主题分区数量, 则有一部分消费者就会闲置, 不接收消息
    • 使用消费者组的目的,可以同时实现离线(Hadoop)和在线处理(Spark),只要分给不同的消费者组
      在这里插入图片描述
  • 消费者组初始化

    • coordinator 辅助消费者组初始化和分配分区

      • hashcode(groupId) % totalNum(_consumer_offset) 计算得到的值对应的分区上的coordinator作为对应消费者组的管理者,所有该组下的消费者都往这个分区提交offset
    • 流程
      在这里插入图片描述

      • 消费方案:哪个消费者消费哪个对应的分区

分区策略与再平衡

  • 解决的问题

    • 如何分配消费者和分区的对应关系
    • 某个消费者挂了之后如何重新分配消费者和分区关系
  • 默认分区策略

    • Range
  • 何时触发再平衡

    • 消费者异常,消费者数改变
    • broker变更,分区数改变
  • Range

    • 先把同个topic里的分区排序,再把消费者排序
    • 分区数/消费者,计算出每个消费者需要消费的分区除不尽的余数部分由排前面的消费者消费。
    • 触发再平衡时,存活的消费者再按上述方法进行分配
      在这里插入图片描述
  • Round Robin

Offset

  • 消费者的offset提交到broker的**_consumer_offsets**主题,每隔一段时间会调用compact策略更新为最新值
    • key:group.id + topic + partiton
    • value:offset
    • 提交offset的意义在于,消费过程中如果consumer挂了,重启之后可以读自己提交的offset继续消费;或者是发生再平衡了,分配到了新分区。(Commited Offset)
    • Current Offset 用于poll() 方法
  • 自动提交
    • enable.auto.commit 默认为true
    • auto.commit.interval.ms 默认5s
  • 手动提交
    • commitSync 同步提交
      • 阻塞当前线程, 一直到提交成功, 并且会自动失败重试
    • commitAsync 异步提交
      • 不阻塞线程,无重试机制,多数情况下选择
    • 两者都会将本次提交的一批数据最高的偏移量提交
  • 指定Offset 用于偏移量无效或找不到偏移量
    • auto.offset.reset = earliest | latest | none 最早 / 最新 / 找不到就抛异常

消费调优

  • 重复消费 / 漏消费

    • 可能发生重复消费的情况

      • 先消费,后提交(没成功)
      • 开启自动提交offset,消费完之后消费者挂了,再次重启后从上一次提交offset的地方重复消费
    • 可能发生漏消费的情况

      • 先提交,后消费(没成功)
      • 开启手动提交offset,提交了之后数据没落盘,消费者挂了
    • 精准一次消费

      • offset和消费过程绑定为原子操作,在能支持事务操纵的介质中进行
  • 数据积压

    • 原因

      • 消费速度跟不上生产速度,消费端下游数据处理能力不足
    • 解决方法

      • 增加分区数 = 提高消费组内的消费者数量上限
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值