当前位置: 首页 > 知识库问答 >
问题:

Kafka Streams应用程序更新

汝和裕
2023-03-14

我已经构建了一个Kafka Streams应用程序。这是我的第一个,所以我正在从概念验证的思维模式转变为“我如何将其产品化?”心态。

tl; dr版本:我正在寻找kafka流部署建议和技巧,特别是与更新应用程序代码相关的建议和技巧。

我已经找到了很多关于Kafka和Streams API如何工作的文档,但是我找不到任何关于实际部署Streams应用程序的文档。

初始部署似乎相当简单-有很好的文档可以配置Kafka集群,然后必须为应用程序创建主题,然后启动应用程序并发布数据以进行处理。

但是,如果以后要升级应用程序,该怎么办?特别是,如果更新包含对拓扑的更改。我的应用程序在windows中进行了大量的数据充实和聚合,因此将来可能需要对处理过程进行调整。

我的理解是,更改处理顺序或在拓扑中插入额外步骤将导致每个处理步骤的内部ID发生移动,这意味着在最好的情况下,将创建新的状态存储,而在最坏的情况下,将在启动时从错误的状态存储主题读取处理步骤。这意味着您必须重置应用程序,或为新版本提供一个新的应用程序id。但这有一些问题:

  1. 如果您重置应用程序或给出一个新的id,处理将从源主题和中间主题开始。我真的不想将输出发布到输出主题两次。
  2. 目前,当您停止升级应用程序时,飞行中的数据将丢失(因为该应用程序永远不会再次启动以恢复处理)。

我认为缓解这种情况的唯一方法是:

  1. 停止将数据发布到源主题。让应用程序处理所有消息,然后将其关闭

这是“好的”,因为我的应用程序是唯一一个读取源主题的应用程序,并且中间主题目前不会在同一应用程序中的下一个处理器中使用。但是,我可以看到这变得相当混乱。

有没有更好的方法来处理应用程序更新?或者我的步骤大体上与大多数开发人员的做法相同?

共有1个答案

欧阳正卿
2023-03-14

我认为你对这个问题有一个完整的了解,你的解决方案似乎是大多数人在这种情况下所做的。

在最近的Kafka峰会上,在格温·夏皮拉和马蒂亚斯·J.萨克斯关于库伯内特斯的部署。回答是相同的:如果您的升级包含拓扑修改,这意味着滚动升级无法完成。

现在看来这件事还没有什么大不了的。

 类似资料:
  • 有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。 Updating Applications There are several ways to update an Electron application. The easiest and officially supported one is

  • 有多种方法可以更新Electron应用. 最简单并且获得官方支持的方法是利用内置的Squirrel框架和Electron的autoUpdater模块。 使用 update.electronjs.org Electron 团队维护 update.electronjs.org,一个免费开源的网络服务,可以让 Electron 应用使用自动更新。 这个服务是设计给那些满足以下标准的 Electron 应

  • 了解如何在收到有可用的新版本通知后更新 Creative Cloud 应用程序。 更新 Creative Cloud 应用程序 Adobe Creative Cloud 桌面应用程序会通知您已安装的应用程序之一是否有可用的更新。更新应用程序以便直接访问新增功能、性能改进以及错误修复。操作方法如下。 注意:有关更新应用程序至 Adobe Creative Cloud 2017 版本的详细信息,请参阅

  • 我们有一个应用程序,利用在应用程序计费。我们看到的问题如下: 当使用较高版本代码的构建被上传到Play Developer控制台时,In App Billing将停止在设备上的应用程序(使用较低版本代码)上工作,表示“应用程序未配置为计费”。 这很好,在测试的时候,但问题是--当应用程序在Google Play商店中时,会有什么行为?当您替换应用程序(以执行更新)时,处于野生状态(具有较低版本代码

  • 所以,我在做一些需要我知道设备上的另一个应用程序何时更新的事情。所以我的问题很简单,让我们说YouTube或Spotify在应用程序更新时发送广播,如果是这样,我需要用我的广播接收器捕捉什么。

  • 在图片中,我想更改应用程序名称仅"应用程序"强文本 我可以更改或更新部署的应用程序名称而不停止托管服务器? 一段时间后的其他信息。如果您想在weblogic wlst控制台中更改应用程序名称,它会接收错误消息。 这表明weblogic Application ationName属性是只读属性。