我想知道是否可以将 kafka 作为云原生应用程序运行,我是否可以在 Pivotal Web Services 上创建一个 kafka 集群作为服务。我不想只集成客户端,我想运行 kafka 集群/服务本身?
谢谢,阿尼尔
我想知道是否可以将 kafka 作为云原生应用程序运行,我是否可以在 Pivotal Web Services 上创建一个 kafka 集群作为服务。我不想只集成客户端,我想运行 kafka 集群/服务本身?
谢谢,阿尼尔
我可以为您指出几个起点,从这些起点到功能齐全的东西需要做一些工作。
一种选择是使用 docker 镜像在 Cloud Foundry(例如 Pivotal Web Services)上部署 kafka 集群。Spotify 有 Dockerized kafka 和 kafka-proxy(包括 Zookeeper)。要记住的一件事是,PWS 目前不支持具有持久性的应用程序(尽管这项工作正在开始),因此如果您现在走这条路,当应用程序滚动时,您将丢失 kafka 中的数据。查看该 Spotify 存储库,看起来 docker 映像通常在没有任何已安装卷的情况下运行,因此这种无持久性的 kafka 似乎可能是一个有效的用例(我对 kafka 的了解还不够多)。
另一种选择是使用 BOSH 在某些 IaaS(例如 AWS)上直接部署 kafka。如果您是第一次看到 BOSH,它可能很难,但它是部署您希望在 VM 上运行的任何分布式软件的理想方式。如有必要,您还可以将持久卷附加到您的 kafka 虚拟机。这是一个可以工作的kafka BOSH 版本。
集群运行后,您有两种方法可以将 Cloud Foundry 应用程序与其集成。最简单的就是将它作为“用户提供的服务”提供给您的应用程序,它可以让您将 kafka 集群访问信息流向您的应用程序。另一种方法是将服务代理放在您的集群前面,如果您有许多不同的人将推送需要与 kafka 集群通信的应用程序,这将特别有用。不必每次都手动告诉人们访问信息,他们可以做一些简单的事情,比如cf bind-service SOME_APP YOUR_KAFKA_SERVICE
. 这是一个kafka 服务代理以及有关一般服务代理的更多信息。
根据 12-factor 应用程序描述 ( https://12factor.net/processes),Kafka不应作为 Cloud Foundry 之上的应用程序运行:
十二因素流程是无状态且无共享的。任何需要持久化的数据都必须存储在有状态的支持服务中,通常是数据库。
Kafka 通常被认为是“分布式提交日志”,因此携带了大量的状态。许多公司使用它来保持所有事件在很长一段时间(有时是无限的)时间内通过他们的分布式微服务系统流动。
因此,我强烈建议在接受的答案中选择第二个选项:Kafka 主题应该以有状态服务的形式绑定到您的应用程序。