我想知道是否可以将kafka作为一个云本地应用程序来运行,以及是否可以在关键web服务上创建一个kafka集群作为一个服务。我不想只集成客户端,我想运行kafka集群/服务本身?谢谢,阿尼尔
0ejtzxu11#
根据12因子应用程序描述(https://12factor.net/processes),kafka不应在cloud foundry上作为应用程序运行:12因素进程是无状态的,不共享任何内容。任何需要持久化的数据都必须存储在有状态的备份服务中,通常是数据库。kafka通常被认为是“分布式提交日志”,因此携带大量的状态信息。许多公司使用它使所有事件在其分布式微服务系统中持续很长时间(有时是无限的)。因此,我强烈建议选择公认答案中的第二个选项:Kafka主题应该以有状态服务的形式绑定到您的应用程序。
8wigbo562#
我可以给你们指出几个出发点,从这些出发点到一些功能齐全的东西,需要做一些工作。一种选择是使用docker映像在cloud foundry(例如pivotal web服务)上部署kafka集群。spotify已将Kafka和Kafka代理(包括zookeeper)对接。需要记住的一点是,pws目前不支持具有持久性的应用程序(尽管这项工作正在开始),因此如果您现在就走这条路线,那么在应用程序滚动时,您将丢失kafka中的数据。看看spotify repo,docker映像通常运行时没有任何装载的卷,因此这种没有持久性的kafka似乎是一个有效的用例(我对kafka了解不够)。另一种选择是使用bosh将kafka直接部署在某些iaas(例如aws)上。如果您是第一次看到bosh,那么它可能很难实现,但是它是部署您希望在vms上运行的任何分布式软件的理想方法。如果需要,您还可以将持久卷连接到kafka vm。这是一个Kafka波什释放可能工作。一旦集群运行起来,就有两种方法可以将CloudFoundry应用程序与之集成。最简单的方法就是将其作为“用户提供的服务”提供给应用程序,这样就可以将kafka集群访问信息流到应用程序中。另一种方法是在集群前面放置一个服务代理,如果您有许多不同的人将推送需要与kafka集群对话的应用程序,这将特别有用。他们可以做一些简单的事情,比如 cf bind-service SOME_APP YOUR_KAFKA_SERVICE . 这里有一个kafka服务代理以及关于服务代理的更多信息。
cf bind-service SOME_APP YOUR_KAFKA_SERVICE
2条答案
按热度按时间0ejtzxu11#
根据12因子应用程序描述(https://12factor.net/processes),kafka不应在cloud foundry上作为应用程序运行:
12因素进程是无状态的,不共享任何内容。任何需要持久化的数据都必须存储在有状态的备份服务中,通常是数据库。
kafka通常被认为是“分布式提交日志”,因此携带大量的状态信息。许多公司使用它使所有事件在其分布式微服务系统中持续很长时间(有时是无限的)。
因此,我强烈建议选择公认答案中的第二个选项:Kafka主题应该以有状态服务的形式绑定到您的应用程序。
8wigbo562#
我可以给你们指出几个出发点,从这些出发点到一些功能齐全的东西,需要做一些工作。
一种选择是使用docker映像在cloud foundry(例如pivotal web服务)上部署kafka集群。spotify已将Kafka和Kafka代理(包括zookeeper)对接。需要记住的一点是,pws目前不支持具有持久性的应用程序(尽管这项工作正在开始),因此如果您现在就走这条路线,那么在应用程序滚动时,您将丢失kafka中的数据。看看spotify repo,docker映像通常运行时没有任何装载的卷,因此这种没有持久性的kafka似乎是一个有效的用例(我对kafka了解不够)。
另一种选择是使用bosh将kafka直接部署在某些iaas(例如aws)上。如果您是第一次看到bosh,那么它可能很难实现,但是它是部署您希望在vms上运行的任何分布式软件的理想方法。如果需要,您还可以将持久卷连接到kafka vm。这是一个Kafka波什释放可能工作。
一旦集群运行起来,就有两种方法可以将CloudFoundry应用程序与之集成。最简单的方法就是将其作为“用户提供的服务”提供给应用程序,这样就可以将kafka集群访问信息流到应用程序中。另一种方法是在集群前面放置一个服务代理,如果您有许多不同的人将推送需要与kafka集群对话的应用程序,这将特别有用。他们可以做一些简单的事情,比如
cf bind-service SOME_APP YOUR_KAFKA_SERVICE
. 这里有一个kafka服务代理以及关于服务代理的更多信息。