Bota5ky

Kafka学习笔记(四):Consumer Groups & Consumer Offsets

Consumer Groups

  • 在一个应用中的所有消费者作为消费者组读取数据
  • 组内的每个消费者从独立的分区读取
  • 如果消费者多于分区,那么一些消费者会处于非活动状态(作为备用的消费者)
  • 分区是最小的并行单位
  • 一个消费者可以消费多个分区
  • 一个分区可以被多个消费者组里的消费者消费
  • 但是,一个分区不能同时被同一个消费者组里的多个消费者消费

1. 发布- 订阅模式

每条消息需要被每个消费者都进行消费:每个消费者都属于不同的消费者组

2. 点对点(一对一)

一条消息只要有被消费就可以:所有消费者都属于同一个消费者组

Consumer Offsets

  • kafka 保存消费者组的 offsets
  • 提交的 offsets 在 kafka topic 中被称为 __consumer_offsets
  • 当组内的一个消费者处理完从 kafka 收到的数据后,它会阶段性地提交 offsets (kafka 代理会写入到__consumer_offsets,而不是消费者组自身)
  • 如果一个消费者崩溃,重启后能根据提交的消费者偏移量重新开始读取数据

消费者交付语义

  • Java 消费者默认会自动提交偏移量(至少一次)
  • 手动提交有3种语义
  • 至少一次(推荐)
    • 消息被处理后提交偏移量
    • 如果处理失败,消息会再被读取
    • 这意味着,我们可以对消息进行重复处理,因此,我们需要确保我们的处理是幂等的(指再次处理不会影响我们的系统)
  • 最多一次
    • 消息收到就提交偏移量
    • 如果处理失败,消息就会丢失(当然也不会再次被读取)
  • 正好一次
    • 对于 kafka => kafka workflows:使用 Transactional API
    • 对于 kafka => 外部系统 workflows:使用幂等消费者
posted @ 2023-01-02 22:13  Bota5ky  阅读(75)  评论(0编辑  收藏  举报