【发布时间】:2018-03-09 04:07:44
【问题描述】:
我有一个具有外部依赖项的 Kafka 流应用程序。如果依赖项不可用,我想稍后重新处理消息。我无法控制偏移量,因为流在内部进行。最好的办法是什么?
【问题讨论】:
我有一个具有外部依赖项的 Kafka 流应用程序。如果依赖项不可用,我想稍后重新处理消息。我无法控制偏移量,因为流在内部进行。最好的办法是什么?
【问题讨论】:
您需要将消息放入存储中,然后将其从存储中取出并重试。
您可以在常规处理期间或通过安排标点符号来重试。
【讨论】:
据我了解 Kafka Streams 和整个 Confluent 平台架构,您不应直接从 Kafka Streams 应用程序与任何外部资源进行通信。基本概念之一是 Kafka Steams 应用程序输入和输出只是 Kafka 主题。与所有其他外部资源的通信应由Kafka Connect 完成。 Confluent 和社区制作了很多不同的连接器,如果需要,您甚至可以write your own implementation。
在这种方法中,您无需自行实施重试。另一件事是,Kafka Streams 中的消息处理不会被任何长期存在的 IO 操作阻塞,这可能会对流拓扑的其他组件产生负面影响。所有阻塞操作和重试都将在专为此类操作设计的 Kafka Connect 连接器中完成。连接器应具有容错性并保证交付。
这是来自Confluent blog 的简单图表,显示了所描述的方法
【讨论】: