在Kafka中使用多个分区有什么好处?

b5buobof  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(454)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

三个月前关门了。
改进这个问题
如何决定是否需要使用多个分区?为什么你会把一个主题放在一个以上?因为在大多数情况下,消息产生的顺序在我看来是很重要的,所以没有理由让事情变得复杂,在几个分区之间分配消息,然后必须实现复杂的算法来获取数据。
请就每个主题使用一个以上分区的优点提出建议。
请注意,我不是在问可伸缩性,因为您可以将单个分区配置为复制到任意数量的克隆中。更像是一个设计问题,为什么有人会将一个主题存储在多个分区上?

ttvkxqim

ttvkxqim1#

分区对于多个场景很有帮助。一个主题中应该有多个分区的主要原因之一是可伸缩性。请记住,一个分区可以复制到“任意数量的克隆”,但只有一个分区负责人将与您的应用程序通信。
正如您所提到的,排序保证对于业务用例通常是必不可少的,而且排序只能在分区内得到保证是正确的。但是,通常数据需要由业务实体(如客户)订购。因此,您可以使用多个分区来设计主题,但要确保特定客户的所有数据始终存储在同一个分区中。这可以通过定制的分区器来实现。
当然,您可以认为每个分区都可以设计为一个单独的主题,只有一个分区。主题有点像dwh中的表,其中所有数据共享相同的模式,因此您可以将具有相同模式(属于同一业务实体)的所有数据收集到一个主题中。同样,拥有多个分区可以增加吞吐量。

fnx2tebb

fnx2tebb2#

首先要注意的是,消息的顺序通常并不重要,或者偏序就足够了。一个例子是将webshop的顺序状态更改推送到主题中。对于大多数处理,您只需要对属于一个订单的消息进行排序,就可以同时并行处理不同的订单。
现在谈谈可伸缩性:如您所知,您可以为一个partiton拥有任意多的副本,但这有什么用呢?它只会提高你的阅读能力。对于写操作,该分区只有一个引线,只有该引线才能写入分区。此外,它还必须将数据写入所有副本,进一步加载leader。另一个可伸缩性问题是partiton绑定到单个节点。这意味着,如果只有一个分区,那么节点上就必须有足够的存储空间来容纳所有数据。
这些是我想到的主要原因,但很可能还有其他原因。

相关问题