如何在cloudfoundry上使用kafka和storm?

How to use kafka and storm on cloudfoundry?

我想知道是否可以 运行 kafka 作为云原生应用程序,我能否在 Pivotal Web Services 上创建一个 kafka 集群作为服务。我不只想要客户端集成,我想要 运行 kafka cluster/service 本身?

谢谢, 阿尼尔

我可以指出几个起点,从这些起点到功能齐全的东西需要做一些工作。

一种选择是使用 docker 图像在 Cloud Foundry(例如 Pivotal Web 服务)上部署 kafka 集群。 Spotify has Dockerized kafka and kafka-proxy (including Zookeeper). One thing to keep in mind is that PWS currently doesn't support apps with persistence (although this work is starting) 所以如果你现在走这条路,你会在应用程序滚动时丢失 kafka 中的数据。查看 Spotify 存储库,看起来 docker 图像通常 运行 没有任何安装的卷,所以这个 persistence-less kafka 似乎是一个有效的用例(我不对卡夫卡的了解足够多了。

另一种选择是使用 BOSH 将 kafka 直接部署在某些 IaaS(例如 AWS)上。如果您是第一次看到 BOSH,它可能很难,但它是在 VM 上部署您想要 运行 的任何分布式软件的理想方式。如有必要,您还可以将持久卷附加到您的 kafka 虚拟机。这是一个可能有效的kafka BOSH release

拥有集群 运行ning 后,您可以通过两种方式将 Cloud Foundry 应用程序与其集成。最简单的就是将它作为“user-provided service", which lets you flow kafka cluster access info to your apps. The alternative would to put a service broker in front of your cluster, which would be especially useful if you have many different people who will be pushing apps that need to talk to the kafka cluster. Rather than you having to manually tell people the access info each time, they can do something simple like cf bind-service SOME_APP YOUR_KAFKA_SERVICE. Here is a kafka service broker along with more info about service brokers in general.

提供给您的应用程序

根据 12 因素应用程序描述 (https://12factor.net/processes),Kafka 不应 运行 作为 Cloud Foundry 之上的应用程序:

Twelve-factor processes are stateless and share-nothing. Any data that needs to persist must be stored in a stateful backing service, typically a database.

Kafka 通常被认为是 "distributed commit log",因此带有大量状态。许多公司使用它来保持所有事件在他们的分布式微服务系统中流动很长一段时间(有时是无限的)。

因此,我强烈建议选择已接受答案中的第二个选项:Kafka 主题应以有状态服务的形式绑定到您的应用程序。