我有一个设置,我将事件推送到 kafka
然后运行 Kafka Streams同一个集群上的应用程序。可以说扩展 Kafka Streams
应用程序的唯一方法是通过添加节点或增加 Partitions
来扩展 kafka
集群本身吗?
在那种情况下,我如何确保我的消费者不会关闭集群并确保关键管道始终“开启”
。 Topology Priority
是否有任何概念可以避免可能的停机时间?我希望能够在不影响核心管道的情况下向任何人公开流以构建应用程序。如果解决方案是设置另一个 kafka 集群,那么对所有临时查询使用 Apache storm
是否更有意义? (我知道很多消费者仍然可能导致 kafka
集群出现问题,但至少现在 topology
处理是隔离的)
最佳答案
不建议在与代理相同的服务器上运行您的 Streams 应用程序(即使这在技术上是可行的)。 Kafka 的 Streams API 提供了一种基于应用程序的方法——而不是基于集群的方法——因为它是一个库而不是一个框架。
无需扩展 Kafka 集群即可扩展您的 Streams 应用程序。通常,Streams 应用程序的并行度受应用程序输入主题的分区数限制。建议对您的主题进行过度分区(这样做的开销相当小)以防止缩放限制。
因此,“提供任何人构建应用程序”变得更加简单,因为每个人都拥有自己的应用程序。无需将应用程序提交到集群。它们可以在您喜欢的任何地方执行(因此,每个团队都可以像部署他们拥有的任何其他应用程序一样部署他们的 Streams 应用程序)。因此,您有许多部署选项,从 WAR 文件、YARN/Mesos 到容器(如 Kubernetes)。最适合您的。
即使 Flink、Storm 或 Samza 等框架提供集群管理,您也只能使用与这些框架集成的工具(例如,Samza 需要 YARN——没有其他可用选项)。假设您已经有一个 Mesos 设置,您可以将它重新用于您的 Kafka Streams 应用程序——不需要专用的“Kafka Streams 集群”(因为没有这样的东西)。
关于apache-kafka - 跨多个用户扩展 Kafka 流应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41844253/