Kafka Producer架构 - 选择记录的分区

本节课将介绍Kafka生产者架构的一些较低层次的细节。我们将介绍Kafka生产者架构,讨论了如何选择分区、生产者节奏和分区策略。

Kafka Producers

Kafka生产者将记录发送到主题。这些记录有时被称为消息。

生产者选择将记录发送到每个主题的哪个分区。生产者可以循环发送记录。生产者可以根据记录的优先级将记录发送到特定的分区,从而实现优先级系统。

一般来说,生产者根据记录的键(key)将记录发送到一个分区。Java的默认分区器使用记录键(key)的hash散列来选择分区,如果记录没有键,则使用轮询策略。

这里的重要概念是生产者挑选分区。

如下图所示,生产者在offset 12上写入,同时消费者组A在offset 9读取。

Kafka生产者写记录的节奏和分区

生产者按其节奏写入,因此不能保证跨分区的记录顺序。

生产者可以配置他们的一致性/持久性级别(ack=0, ack=all, ack=1),我们将在后面介绍。

生产者选择分区,以便Record/消息根据数据进入给定分区。例如,可以将具有某个'employeeId'的所有事件放到同一个分区中。如果不需要分区内的顺序,可以使用“Round Robin”(轮询)分区策略,这样记录就可以均匀地分布在各个分区上。

Kafka Producer架构常见问题

问:生产者偶尔会比消费者写得快吗?

答:是的。生产者可以有大量的记录,而消费者不必与消费者在同一页上。

问:没有使用key的生产者的默认分区策略是什么?

答:Round-Robin(轮询)。

问:对于使用key的生产者的默认分区策略是什么?

答:具有相同键(key)的记录被发送到相同的分区。

问:谁选择将记录发送到哪个分区?

答:生产者选择一个记录到哪个分区。


《Flink原理深入与编程实战》