首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在多个用户之间扩展Kafka流应用程序

在多个用户之间扩展Kafka流应用程序
EN

Stack Overflow用户
提问于 2017-01-25 05:43:31
回答 2查看 1.1K关注 0票数 2

我有一个将事件推送到kafka的设置,然后在同一个集群上运行卡夫卡流应用程序。公平地说,扩展Kafka Streams应用程序的唯一方法是通过添加节点或增加Partitions来扩展kafka集群本身。

在这种情况下,我如何确保我的使用者不会关闭集群,并确保关键管道始终是"on"。是否有Topology Priority的概念可以避免可能的停机?我希望能够公开流,任何人都可以构建应用程序,而不损害核心管道。如果解决方案是设置另一个kafka集群,那么对所有特殊查询使用Apache storm更有意义吗?(据我所知,许多消费者仍然可能导致kafka集群的问题,但至少现在topology处理是孤立的)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-25 07:00:59

不建议在与代理服务器相同的服务器上运行流应用程序(即使这在技术上是可行的)。Kafka的Streams API提供了一种基于应用程序的方法--而不是基于集群的方法--因为它是一个库,而不是一个框架。

它不需要缩放您的Kafka集群来缩放您的流应用程序。一般来说,流应用程序的并行性受到应用程序输入主题的分区数的限制。建议对您的主题进行过度分区(这方面的开销相当小),以防止缩放限制。

因此,当每个人都拥有自己的应用程序时,“提供任何人来构建应用程序”就更简单了。没有必要向集群提交应用程序。它们可以在任何您喜欢的地方执行(因此,每个团队都可以按照部署任何其他应用程序的方式部署它们的流应用程序)。因此,您有许多部署选项,从WAR文件到纱线/Mesos,到容器(比如Kubernetes)。任何对你最有效的。

即使像Flink、Storm或Samza这样的框架提供集群管理,您也只能使用与这些框架集成的工具(例如,Samza需要纱线-没有其他可用的选项)。假设您已经有了一个Mesos设置,您可以为您的Kafka流应用程序重用它--不需要专门的"Kafka流集群“(因为没有这样的东西)。

票数 4
EN

Stack Overflow用户

发布于 2017-01-25 10:39:06

应用程序的处理器拓扑是通过将其分解为多个任务来缩放的。 更具体地说,Kafka流根据应用程序的输入流分区创建固定数量的任务,每个任务从输入流(即Kafka主题)分配一个分区列表。 对任务的分区分配永远不会改变,因此每个任务都是应用程序的一个固定的并行性单元。然后,任务可以基于分配的分区实例化自己的处理器拓扑;它们还为分配的每个分区维护一个缓冲区,并一次性处理来自这些记录缓冲区的消息。 因此,流任务可以在不需要人工干预的情况下独立地并行处理。 重要的是要理解Kafka流不是一个资源管理器,而是一个在其流处理应用程序运行的任何地方“运行”的库。应用程序的多个实例要么在同一台机器上执行,要么分布在多台机器上,库可以将这些任务自动分发给那些运行应用程序实例的人。 分配给任务的分区永远不会改变;如果应用程序实例失败,所有分配的任务将在其他实例上重新启动,并继续使用相同的流分区。

流的处理发生在运行应用程序的机器上。

我建议你看看本指南,它可以帮助你更好地理解卡夫卡流的工作方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41844253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档