首页 > 解决方案 > 我们可以在 Kafka 中有多少个分区?

问题描述

我的 IoT 项目中有一个要求,例如,一个名为“NorthBound”(NB)的自定义 Java 应用程序最多可以管理 3000 个设备。设备将数据发送到 SouthBound(SB - Java 应用程序),SB 将数据发送到 Kafka,然后从 Kafka,NB 使用消息。为了管理大约 100K 设备,我计划启动多个 NorthBound 实例(大约 35 个),但我希望同一个实例应该接收来自同一个设备的消息。例如,Device1 正在向 NB_instance1 发送数据,Device2 正在向 NB_instance2 发送数据等。

为了解决这个问题,我正在考虑创建 35 个相同主题的分区(设备消息),以便每个 NB 实例可以使用一个分区,并且相同设备的数据应该转到同一个 NB 实例。这是正确的方法吗?或者有没有更好的方法?

我们可以在 Kafka 集群中创建多少个分区?考虑到集群中的 3 个节点(代理),推荐值是多少?目前,我们在 Kafka 中只有 1 个节点。我们可以继续使用单节点和 35 个分区吗?

假设在启动时我可能只有 5-6K 设备,那么我将只有 2 个分区和 2 个 NB 实例。当我们逐渐添加更多设备时,我们将不断添加更多分区和 NB 实例。我们可以在不重新启动 Kafka 的情况下做到这一点吗?是否可以动态创建分区?

问候,

克里尚

标签: apache-kafka

解决方案


正如您可以想象的那样,您可以拥有的分区数量取决于许多因素。

假设你有最近的硬件,从 Kafka 1.1 开始,每个代理可以有 1000 个分区。此外,Kafka 已经在集群中使用超过 100000 个分区进行了测试。链接 1

根据经验,建议过度分区以允许未来的流量/使用量增长。Kafka 允许在运行时添加分区,但这会改变键控消息的分区,这可能是一个问题,具体取决于您的用例。

最后,不建议为生产工作负载运行单个代理,因为它会崩溃或失败,您将面临中断和可能的数据丢失。即使只有 35 个分区,最好至少有 2 个复制因子为 2。


推荐阅读