分享

为什么要在Kubernetes上运行Kafka,有哪些问题?

问题导读

1.为什么要在Kubernetes上运行Kafka?
2.Kafka在Kubernetes需要注意哪些问题?
3.在Kubernetes上的部署Kafka时,需要什么团队方面的合作?

关注最新经典文章,欢迎关注公众号


running-kafka-on-kubernetes-1350x900px-01.png


为什么要在Kubernetes上运行Kafka?
我看到大型组织的情况,未在Kubernetes部署Kafka,导致严重的组织问题。在这种情况下,我通常会说这不是一个好的方案。推荐在Kubernetes上运行Kafka,如果这样做,将更快地分配你的环境,并且能够利用时间进行富有成效的工作,而不是组织战斗。如果出现问题,将从内部基础架构团队获得更好的服务,因为将在他们熟悉的环境中运行。

其次,大多数组织都低估了他们最终会部署多少个Kafka集群。随着用例数量的增加,最终会拥有多个生产集群。当然还有开发环境,测试环境,试用新版环境,各种部署环境等等。

Kubernetes确实可以更轻松地部署和管理新集群。可以使用其他部署工具,如Confluent的Ansible脚本,但它们没有内置的扩展,监控,重启,升级等规定。

一旦你习惯了Kubernetes(并且不需要很长时间),你会发现Kafka的管理变得更加容易。扩展添加新broker变得更容易,是单个命令或配置文件中的单个行。并且更容易在所有broker和所有集群上执行配置更改,升级和重新启动。


Kafka在Kubernetes需要注意的问题
Kafka是一项有状态的服务,这确实使Kubernetes配置比无状态微服务更复杂。 配置存储和网络时将面临最大的挑战,您需要确保两个子系统都能提供一致的低延迟。

kafka on Kubernetes和其他有状态服务需要使用共享存储。对Kubernetes的本地持久存储的支持仍处于测试阶段,不建议用于生产,尽管现在可能是开始在试点项目上测试它的好时机,因为它可能在几个月内成为GA。

遗憾的是,许多组织仍无法在其共享存储设备上提供一致的低延迟。如果想在Kubernetes上成功运行Kafka,需要确保存储团队了解这些要求,并确保一起验证它们是否符合要求。

Kafka还提出了大多数有状态服务都没有的挑战:Brokers不可互换,客户端需要直接与包含他们生产或消费的每个分区的主要副本的Broker进行通信。不能将所有Brokers置于单个负载均衡器地址之后。需要一种方法将消息路由到特定的Broker。

这并不是特别困难。在Kubernetes上的部署Apache Kafka,在大多数情况下,该过程需要网络团队的合作。

这里的主要教训是,只有当拥有熟练的存储和网络团队的合作时,才能成功地在Kubernetes上运行Kafka。如果你没有那些,你将遇到麻烦。但同样一直如此 - Kafka依赖于良好的基础设施,缺乏良好企业基础设施的客户无论如何都会遇到问题。

另外,建议不要选择Kafka作为第一个在Kubernetes上运行的服务。让基础架构团队首先获得部署,监控,更新和排除无状态服务故障的经验,例如Kafka Streams应用程序。

如前所述,Kubernetes上的任何单个应用程序都不会为你带来太多好处。当你使用它来管理所有应用程序和基础架构时,Kubernetes真的很棒。如果业务应用程序也在Kubernetes上运行,那么在Kubernetes上运行Kafka brokers是最有益的。

现在,一些工程师会考虑这样一个事实:您需要使用负载均衡器策略在共享存储和headless services上配置持久卷,并将这些视为“workarounds”,并指出Kubernetes上的StatefulSets还不是很成熟。在我们看来,Kafka有特定的要求,Kubernetes提供支持Kafka的机制。在1.9版本中,StatefulSets是Kubernetes生态系统中的 first-class。

相关文章推荐:
知乎基于 Kubernetes 的 Kafka 平台探索和实践
http://www.aboutyun.com/forum.php?mod=viewthread&tid=24786


相关代码下载:
kubernetes-kafka-master.zip (48.67 KB, 下载次数: 1)

本帖被以下淘专辑推荐:

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条