这是在 Kubernetes 上运行 Kafka 的好方法吗?
Posted
技术标签:
【中文标题】这是在 Kubernetes 上运行 Kafka 的好方法吗?【英文标题】:Is it a good way to run Kafka on Kubernetes? 【发布时间】:2018-06-05 13:43:15 【问题描述】:对于大型在线应用,使用 k8s 运行。规模可能日活用户50万。
k8s 内部的应用需要消息传递功能 - Pub/Sub,有以下选项:
卡夫卡 RabbitMQ Redis卡夫卡
它需要 zookeeper 并且在操作系统上运行良好取决于磁盘 I/O。那么如果将它安装到k8s集群中,如何?性能会更差吗?
而且,如果将 Kafka 保持在 k8s 集群之外,将 Kafka 从 k8s 集群内的应用程序连接起来,那性能如何?他们在不同的层,不会很慢吗?
RabbitMQ
它比Kafka慢,但是对于一个日活用户500,000的应用程序来说,它足够好吗?如果是这样,也许这是一个不错的选择。
Redis
这是另一种选择。也许是最简单的一个。但是从互联网上我了解到它有时会丢失消息。如果是真的,那就太可怕了。
所以,最重要的是,在 k8s 上使用 Kafka(也与 zookeeper 一起),在这个用例中好还是不好?
【问题讨论】:
【参考方案1】:另一个简单的在DigitalOcean中Kubernetes上的Kafka/Zookeeper配置与外部访问:
https://github.com/StanislavKo/k8s_digitalocean_kafka
您可以通过常规二进制协议从 AWS/DO/GCE 外部连接到 Kafka。连接是 PLAINTEXT 或 SASL_PLAINTEXT(用户/密码)。
Kafka 集群是 StatefulSet,因此您可以轻松扩展集群。
【讨论】:
请不要在多个问题中添加相同的答案 - 1、2、3、4、-。回答最好的一个并将其余的标记为重复。见Is it acceptable to add a duplicate answer to several questions?【参考方案2】:你也可以看看以下项目:
https://github.com/EnMasseProject/barnabas
这也是关于在 Kubernetes 和 OpenShift 上运行 Kafka。它提供了使用具有持久卷或仅在内存中的 StatefulSets 进行部署(用于开发或仅用于测试目的)。它还提供 Kafka Connect 和 Prometheus 指标的部署。
【讨论】:
【参考方案3】:是的,在 Kubernetes 上运行 Kafka 很棒。看看这个例子:https://github.com/Yolean/kubernetes-kafka。它包括 ZooKeeper 和 Kafka 为StatefulSet
s。
附言。在 Kubernetes 上运行您问题中的任何服务都会很愉快。您可以谷歌服务的名称和“kubernetes”并找到示例清单。这里有很多例子:https://github.com/kubernetes/charts。
【讨论】:
非常感谢您的回答。正如我所问和担心的那样,它的性能与使用纯操作系统和使用 docker 的 k8s 相同吗? 我认为 kubernetes 总是有开销。我没有对它进行基准测试,但我读到 kubernetes 确实有开销。我会谷歌它。不过,就我个人而言,我认为开销不会因为方便而减损。【参考方案4】:对于 Kafka,你可以找到一些建议here。 Kubernetes 1.7+ 支持local persistent volume,这可能对 Kafka 部署有好处。
【讨论】:
以上是关于这是在 Kubernetes 上运行 Kafka 的好方法吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 Kubernetes 中运行 Kafka 时如何管理页面缓存资源
通过 AWS 上的 ELB 在 Kubernetes 上公开单个 Kafka 代理