我已经构建了一个Kafka Streams应用程序。这是我的第一个,所以我正在从一个概念验证的思维模式转变为“我怎样才能生产这个?”心态。
tl; dr版本:我正在寻找kafka流部署建议和提示,特别是与更新应用程序代码有关。
我已经能够找到很多关于Kafka和Streams API如何工作的文档,但是在实际部署Streams应用程序时我找不到任何内容。
初始部署似乎相当简单 - 有很好的文档可以配置您的Kafka集群,然后您必须为您的应用程序创建主题,然后您可以启动它并发布数据以便处理它
但是如果您想稍后升级您的应用程序怎么办?具体而言,如果更新包含对拓扑的更改。我的应用程序在窗口中进行了大量的数据丰富和聚合,因此将来可能需要对处理进行调整。
我的理解是,更改处理顺序或在拓扑中插入其他步骤将导致每个处理步骤的内部ID发生偏移,这意味着最多会创建新状态存储,前一个状态将丢失,最坏情况下,处理启动时从错误的状态存储主题读取的步骤。这意味着您必须重置应用程序,或者为新版本提供新的应用程序ID。但是有一些问题:
我能想到的唯一方法就是:
现在这是“好的”,因为我的应用程序是唯一一个从源主题中读取的应用程序,并且当前主题目前尚未用于同一应用程序中的下一个处理器。但是,我可以看到这变得非常混乱。
有没有更好的方法来处理应用程序更新?或者我的步骤通常与大多数开发人员的步骤一致吗?
答案 0 :(得分:0)
我认为您已经全面了解了此问题,在大多数情况下,您的解决方案似乎就是大多数人所做的。
在latest Kafka-Summit之后,talk of Gwen Shapira and Matthias J. Sax提出了有关Kubernetes部署的问题。响应是相同的:如果您的升级包含拓扑修改,则意味着无法进行滚动升级。
看来目前尚无KIP。