apache-kafka - 跨多个用户扩展 Kafka 流应用程序

标签 apache-kafka apache-kafka-streams confluent-platform

我有一个设置,我将事件推送到 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/

相关文章:

apache-kafka - 在分布式模式下运行 kafka 连接?

apache-kafka - Kafka Mirror Maker 无法复制 __consumer_offset 主题

windows - 通过终端关闭 Kafka

java - 如何在spark中将List<Objects>的byte[]解码为Dataset<Row>?

java - KTable数据在Kafka中保存多久?或者说如何控制时间

apache-kafka-streams - Kafka 流提交偏移语义

java - Kafka KStream - 显着的启动延迟

apache-kafka - kafka jdbc 接收器连接器中的批量大小

java - Storm Bolt 不打印/记录 Kafka Spout

java - 如何使用 Junit 5 通过 Testcontainer 运行 Kafka 集成测试