卡夫卡中可以有几个分区?

时间:2019-02-25 10:04:22

标签: apache-kafka

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

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

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

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

此致

克里山

1 个答案:

答案 0 :(得分:1)

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

假设您具有最新的硬件,从Kafka 1.1开始,每个代理可以有1000个分区。此外,Kafka已通过集群中超过100000个分区的测试。 Link 1

根据经验,建议对分区进行一些过度分配,以使将来的流量/使用量增加。 Kafka允许add partitions at runtime,但是这将更改键控消息的分区,这可能会因您的使用情况而出现问题。

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