Kafka平衡多个租户之间的负载

时间:2019-05-01 18:48:21

标签: apache-kafka kafka-consumer-api

我正在考虑将Kafka作为用作工作节点的消息代理的几种技术之一,该技术最终将推送通知发送给用户。一个重要的约束是我不希望一个租户垄断资源,以致它插入一百万条通知消息并阻止其他租户在合理的时间内接收其通知。换句话说,我希望每个租户以大约相同的速度处理他们的消息。我的选择似乎是为每个租户创建一个主题,或者为每个租户创建一个分区。两者似乎都有问题和/或皱眉。

为每个租户创建一个主题似乎是后勤上的噩梦。每次将新的租户添加到该应用程序时,都必须以某种方式通知消费者以订阅该主题。

为每个租户创建一个分区似乎没有那么糟糕,但是似乎对此感到不满意。但是,根据我对分区和使用者之间负载分配方式的理解,如果多个租户共享同一个分区,则一个租户消息可能会卡在另一个租户的后面,这不是我想要平衡负载的方式。

我最好的选择是什么?我没有考虑第三种可能性吗?卡夫卡不是适合这项工作的工具吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您让多个“租户”共享一个分区,那么您担心一个租户会劫持一个分区的想法就会成真。在这种情况下,除了为每个租户创建主题外,您别无选择。您如何处理行政部门?

  • 您可以将int main() { int i1 = 1, i2 = 0; int& ri = i1; ri = i2; // i1 == 0 std::cout << "i1 " << i1 << "\n"; i2 = 5; std::cout << "i2 " << i2 << "\n"; } 设置为auto.create.topics.enable,以便租户可以仅通过向其发送消息来创建主题。
  • 如果主题名称遵循模式,则向用户注册动态创建的主题并不复杂。您的消费者应订阅与给定的pattern相匹配的主题。
true

可以使用public void subscribe(java.util.regex.Pattern pattern) Subscribe to all topics matching specified pattern to get dynamically assigned partitions. The pattern matching will be done periodically against topics existing at the time of check. (默认值为5分钟)来配置消费者检测新主题的速度

如果您要创建数千个主题,则可能需要检查性能(see