基本概念

最近更新时间:2019-11-15 16:31:43

消费组

消费组(ConsumerGroup)是实时消费日志主题的基本管理单元。使用消费组消费,用户无需关心消费过程中主题分区的分配问题,系统会对消费组中的消费者任务进行自动负载均衡,也无需关心断点继续消费的问题,消费组会保存消费进度,从而保证程序能从断点继续消费,不会消费重复数据。

一个日志主题可以被多个消费组消费,每个消费组消费数据时互不影响。一个消费组可以包含多个消费者,消费者之间不重复消费数据。

消费组有两个重要属性:

  • 是否保序(order)
    实时消费可以分为顺序消费和无序消费,用户可以根据业务需求设置是否按顺序进行消费。
    • 顺序消费(order = true)
      若设置为 true,则表示主题分区需要按顺序进行消费。当主题分区发生分裂操作时,会先消费原分区的数据,然后并列消费两个新分区的数据;当主题分区发生合并操作时,会先消费原来两个分区的数据,然后消费新分区的数据。
    • 无序消费(order = false)
      若设置为 false,则表示主题分区不需要按顺序进行消费。
  • 超时(timeout)
    超时属性是系统判断一个消费者是否处于活跃态的标准。当消费者上报心跳的时间超过预设值,则判断该心跳已超时,系统会认为该消费者处于离线状态。若消费组在预设超时时间内没有收到任何心跳,消费组将会被删除。

消费者

消费者(Consumer)是实际消费数据的单元,同一个消费组下消费者名称不能同名。同一个消费组下的消费者会按均衡模式共同消费一个日志主题下所有分区的数据,系统给消费者分配消费任务时,遵循以下原则:

  • 每个消费者可以消费多个主题分区的数据
  • 一个主题分区只能被一个消费者消费

当消费组里的消费者数量发生变化时,系统会自动重新分配消费任务,以达到消费负载均衡的目的,分配过程用户无需关心,由系统自动完成。

消费者心跳

每个消费者需要定期向服务端发送心跳(HeartBeat),用于系统判断消费者的活跃状态。消费组根据收到的心跳情况,自动均衡分配主题分区给所有活跃的消费者。

消费组游标

消费组游标(ConsumerGroupCursor)表示分区的消费进度。在用消费组进行消费的过程中,需要消费者每次消费完数据后更新游标到消费组,便于下次消费组根据情况均衡分配消费任务。消费者在获取分区消费任务后,也需向消费组获取当前分区的进度游标。

关系图