0%

Kafka生产者、主题、分区、消费者关系

生产者生产消息到主题的某个分区,消者以消费者组的名义(组内有多个消费者)订阅主题进行接收消息。我们
都知道:同一分区,只能由同一个消费者组内的一个消费者消费,那么生产者的消发送给哪个分区?消费者组
消费哪个分区?

一、分区与主题

默认分区数量是通过 server propertiesnum. partitions获得,具体可在创建主题时指定,这里不在讲述。

二、分区与生产者

org.apache.kafka.clients.producer.internals.Default Partitioner

默认策略

  • 如果在发消息的时候指定了分区,则消息投递到指定的分区
  • 如果没有指定分区,但是消息的key不为空,则基于key的哈希值来选择一个分区
  • 如果既没有指定分区,且消息的key也是空,则用轮询的方式选择一个分区

三、分区与消费者

其实就是组内的消费者负责主题下的分区,即消费者和分区是一对多的关系(同一消费组)。

分区数与组内消费者数

  • 若分区数大于组内消费者数,那么就相当于有个别消费者会负责多个分

  • 若相等消费者负责一个分区

  • 若小于,说明有个别消费者空闲,获取不到消息。

以上只针对默认策略。自定义策略继承org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignot

默认策略

  • Range

    1. 首先,将分区按数字顺序排好序,消费者按消费者名称的字典序排好序
    2. 然后,用分区总数除以消费者总数。如果能够除尽,则皆大欢喜,平均分配;若除不尽,则位于排序前面的消费者将多负责一个分区
  • Roundrobin(轮询)


以上就是简单入门,对 Kafka各个组件以及消费和生产有个大概了解