Kafka Streams 多实例设计含义

Kafka Streams Multiple Instance Design Implications

问题:在单个 JVM 中拥有 org.apache.kafka.streams.KafkaStreams class 的多个实例有什么影响(例如:内存,CPU 用法,并发问题)?

背景:我正在尝试提供一种隔板机制,以便如果流操作抛出异常,它不会将整个 KafkaStreams 实例转换为 ERROR 状态。我将应用程序划分为不同的 KafkaStreams 个实例,每个实例负责不同的任务(日志记录、外部 Web 调用、数据库调用等)。

我无法找到有关如何 (1) 从 ERROR 状态恢复 KafkaStreams 实例或 (2) 使用 [= 设计提供一些隔板原则的应用程序的文档11=] 或 (3) 证明或反驳我目前的做法。

如果我的方法违反了 Confluent 或 Kafka 记录的最佳实践,那么了解它也会有所帮助。

应用程序版本:Kafka 1.0.0,Kafka-streams 1.0.0

如果一个 KafkaStreams 实例最终处于 ERROR 状态,您需要 close() 它并创建一个新实例,您可以开始替换旧实例。

对于单个 JVM 中的 运行 多个 KafkaStreams 实例:这基本上没问题。请注意,如果这些实例属于同一个应用程序,则需要为它们配置不同的状态目录以将两者相互隔离。否则,它们会自动相互隔离。

对我来说,您的设计很有意义。但请注意,它会占用更多资源,因为 KafkaConsumerKafkaProducer 无法为您设置共享。