将单个 kafka 集群分成多个集群的一般准则是什么?

What are the general guidelines for breaking a single kafka cluster into multiple?

主题与其丰富的配置相结合,可用于隔离单个 kafka 集群中的不同工作负载。有哪些经验法则可用于确定是否将单个 kafka 集群拆分为多个?

多数据中心部署,在很多场景下必然会调用多个kafka集群。还有哪些其他常见场景和注意事项?

以下是我遇到的一些证明多个集群有用的场景:

  • 需要以不同速度升级 Kafka 的团队 - 有些团队非常保守,基本上不喜欢接触 Kafka。其他团队需要升级,因为他们需要新功能(0.10.0 中的 Kafka Streams,0.10.1.0 中的基于时间的索引)或错误修复。激进的升级者和保守的升级者应该得到单独的集群。

  • 一些配置是集群范围的,如果两个用例要求不同的配置,您没有太多选择。

  • 不同的性能需求有时意味着不同的硬件,让Kafka在一组服务器上保留一些主题而在另一组服务器上保留其他主题是一个PITA。不同的集群更有意义。

  • 类似:一些用例是实验性的,会在 Kafka 上产生不可预测的负载,其他用例需要非常稳定和可预测的性能。为了大家的理智,把他们分开。

  • 类似:Kafka 只有非常基本的 QoS 保证,因此一个超级活跃的主题(比如点击流)可能会导致其他主题(比如支付处理)变慢。

  • 不同的 SLA:如果单个用例需要您经常在半夜跳起来而其他人不需要,也许给它自己的集群以降低跳动率。

  • 不同的安全要求:Kafka 可以选择性地保护主题,但我注意到,如果将敏感数据放在一个集群上,将不敏感数据放在另一个集群上,每个人都会睡得更好。这也与性能有关 - SSL 加密占用了大量 CPU,因此如果您可以将其限制在一个集群中,则可以节省 hardware/ec2 成本。

希望这对您有所帮助 :) 我很确定我连一半都没有讲到...