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

问题描述 投票:1回答:1

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

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

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

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

谢谢!

apache-kafka kafka-consumer-api
1个回答
1
投票

如果你让多个“租户”共享一个分区,你可能会想到一个租户劫持一个分区。在这种情况下,您可能别无选择,只能为每个租户创建主题。你怎么能解决这个问题呢?

  • 您可以将auto.create.topics.enable设置为true,以便租户可以通过向其发送消息来创建主题。
  • 如果您的主题名称遵循模式,则向动态消费者注册动态创建的主题并不复杂。您的消费者应订阅与给定的pattern相匹配的主题。
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.

使用metadata.max.age.ms可以配置消费者检测新主题的速度(默认为5分钟)

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

© www.soinside.com 2019 - 2024. All rights reserved.