分区在kafka topic中的用途是什么?



我无法理解Kafka文档中划分主题的确切需求是什么?如果只有一个主题,没有分区(或只有一个分区),问题是什么?

主题需要分区,即使有一个

分区是Kafka并行化和排序的单位。如果只有一个分区,那么所有事件都是严格排序的(按插入时间排序)。这是一个有效的用例,而不是一个"问题"。

Kafka记录可以被认为是键值元组。生产者将散列任何非空键,并将它们路由到相同的分区。因此,例如,如果您有userid,并且有"用户创建/更新/删除"之类的事件,那么所有相同的事件将到达该用户的同一分区,因此可以按顺序处理它们(不先创建就不能更新或删除)。但并非所有用户都需要到达同一个分区,因此您可以将该处理并行到数百或数千个分区,以处理任何此类"用户事件"。话题。

对于Kafka记录中的空键,事件是在所有分区上循环分布的,你的消费者不能保证以什么顺序读取这些事件(再次,除非有一个分区)。这对于标准消息传递非常有用,因为您只想知道发生的事情,但不需要该事件的历史上下文。当发生大量事件时,您可以添加更多的分区,并且您希望能够更快地使用它们。

消费者组中的消费者一次只能分配一个分区。例如,如果您想快速处理100万个事件,那么您可以将100K事件分布在100个分区上,并与100个消费者并行处理,而不是一个消费者等待自己处理1M事件。

最新更新