在Kafka文档中,我无法理解划分一个主题的确切需要是什么?如果它只是一个没有分区的主题(或者只有一个分区),问题是什么?
发布于 2022-12-02 17:18:26
主题需要分区,即使有分区。
分区是Kafka的并行化和排序单元。如果您有一个分区,那么所有事件都会严格排序(按插入时间)。这是一个有效的用例,而不是“问题”。
卡夫卡记录可以被认为是键值元组。生产者将散列任何非空密钥,并将它们路由到相同的分区。因此,例如,如果您有userIds,并且有"user create/ update / delete“这样的事件,那么所有相同的事件都会到达该用户的同一个分区,因此它们可以按顺序处理(如果不首先创建,就不能更新或删除它们)。但是并不是所有的用户都需要到达同一个分区,因此您可以将该处理并行化为数百个或数千个分区,用于任何这样的“用户事件”主题。
对于Kafka记录中的空键,事件是循环分布在所有分区上的,并且您的使用者无法保证这些事件的读取顺序(同样,除非有一个分区)。这对于标准消息传递非常有用,您只想知道发生了什么事情,但不需要该事件的历史上下文。当大量事件发生时,您会添加更多的分区,并且您希望能够更快地使用它们。
使用者组中的使用者一次只能分配一个分区。举个例子--如果您想要快速处理100万个事件,那么您可以让100K事件分散在100个分区上,并与100个消费者并行处理,而不是一个等待单独处理1万个事件的消费者。
发布于 2022-12-02 17:29:28
简单地说,在Kafka中,主题是发布消息的类别或提要名称。分区是一种技术,用于在组成Kafka集群的多个代理(服务器)之间传播数据,以提高可伸缩性和可用性。
不对进行分区,主题中的所有消息都将存储在单个代理上,这可能成为整个系统的性能瓶颈和单一故障点。通过对主题进行分区并在多个代理之间传播消息,您可以分发负载并使系统更好地抵御故障。
例如,如果您有一个具有大量消息的主题和一个代理,代理可能无法处理传入的负载,系统的性能可能会受到影响。通过对主题进行分区并将消息存储在多个代理上,您可以提高系统的总体吞吐量,并提高其处理大量数据的能力。
https://stackoverflow.com/questions/74655458
复制相似问题