Kafka和Storm环境下如何实现多租户?
Posted
技术标签:
【中文标题】Kafka和Storm环境下如何实现多租户?【英文标题】:How to achieve multi-tenancy in the context of Kafka and storm? 【发布时间】:2014-06-24 08:23:06 【问题描述】:在 Kafka 和 Storm 的上下文中构建多租户应用程序的最佳实践是什么?
例如:为每个租户创建主题并消费多主题spout(使用通配符)。
【问题讨论】:
一个后期评论来完善这个问题:不管你在 Kafka 端做什么,每个 Kafka-spout 实例也会在 zookeeper 中跟踪它的偏移量。对于适当的多租户,您还需要查看如何管理这些 Zookeeper 节点。对于非三叉戟喷口,这非常简单。通过证明zookeeper-root节点,但对于Trident,我只能冒险“客户端ID”在某种程度上是等效的。特别是 Spout 名称在 Storm-kafka 中如此神奇(它们是标识符并共享 ZK 信息),在尝试多租户时了解 Zookeeper 中发生的事情至关重要。 【参考方案1】:不要将我的回答视为“最佳实践”,因为我不是 Kafka 专家,但如果它有帮助:我们面临类似的设计场景(一个可供多个团队使用的 Kafka 端点,作为事件创建和路由)。在考虑了不同的替代方案后,我们决定了您的建议:每个应用程序有一个主题(您可以说租户),根据应用程序需求自定义主题(分区、限制等)。
希望这会有所帮助。
【讨论】:
【参考方案2】:有时每个应用程序可能需要多个主题。在这种情况下,您可以遵循以下主题命名约定: topic_base_name_tenant_id。因此,对于给定的基本主题,您将拥有与租户数量一样多的主题
【讨论】:
【参考方案3】:我认为每个租户的主题都是正确的选择。
命名约定可能是这样的:topic_base_name_tenant_id。
原因是:
-
它允许为每个租户灵活配置(如前面提到的@Sebastian)。
更清晰的逻辑分隔。
现在假设我们将使用不同的方法。例如,为每个租户分区。这可能是有问题的,因为:
-
您将并行度级别限制为租户数量。
添加新租户,结果添加新分区→重新发布旧消息(默认分区算法为:message_key % partition_size)。
【讨论】:
以上是关于Kafka和Storm环境下如何实现多租户?的主要内容,如果未能解决你的问题,请参考以下文章