我有一个将事件推送到kafka的设置,然后在同一个集群上运行卡夫卡流应用程序。公平地说,扩展Kafka Streams应用程序的唯一方法是通过添加节点或增加Partitions来扩展kafka集群本身。
在这种情况下,我如何确保我的使用者不会关闭集群,并确保关键管道始终是"on"。是否有Topology Priority的概念可以避免可能的停机?我希望能够公开流,任何人都可以构建应用程序,而不损害核心管道。如果解决方案是设置另一个kafka集群,那么对所有特殊查询使用Apache storm更有意义吗?(据我所知,许多消费者仍然可能导致kafka集群的问题,但至少现在topology处理是孤立的)
发布于 2017-01-25 07:00:59
不建议在与代理服务器相同的服务器上运行流应用程序(即使这在技术上是可行的)。Kafka的Streams API提供了一种基于应用程序的方法--而不是基于集群的方法--因为它是一个库,而不是一个框架。
它不需要缩放您的Kafka集群来缩放您的流应用程序。一般来说,流应用程序的并行性受到应用程序输入主题的分区数的限制。建议对您的主题进行过度分区(这方面的开销相当小),以防止缩放限制。
因此,当每个人都拥有自己的应用程序时,“提供任何人来构建应用程序”就更简单了。没有必要向集群提交应用程序。它们可以在任何您喜欢的地方执行(因此,每个团队都可以按照部署任何其他应用程序的方式部署它们的流应用程序)。因此,您有许多部署选项,从WAR文件到纱线/Mesos,到容器(比如Kubernetes)。任何对你最有效的。
即使像Flink、Storm或Samza这样的框架提供集群管理,您也只能使用与这些框架集成的工具(例如,Samza需要纱线-没有其他可用的选项)。假设您已经有了一个Mesos设置,您可以为您的Kafka流应用程序重用它--不需要专门的"Kafka流集群“(因为没有这样的东西)。
https://stackoverflow.com/questions/41844253
复制相似问题