Kafka Streams多实例设计的含义

时间:2018-03-15 13:51:05

标签: apache-kafka apache-kafka-streams confluent-kafka confluent

问题:在一个JVM中有多个org.apache.kafka.streams.KafkaStreams类实例有什么含义(EG:内存,CPU使用率,并发问题)?

后台:我正在尝试提供批量处理机制,以便在流操作引发异常时,它不会将整个KafkaStreams实例转换为ERROR状态。我已将应用程序划分为不同的KafkaStreams实例,每个实例负责单独的任务(日志记录,外部Web调用,数据库调用等)。

我无法找到有关如何(1)从KafkaStreams状态恢复ERROR实例或(2)使用{{1}设计提供某些批量原则的应用程序的文档}或(3)证明或反驳我目前的做法。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

对我来说,你的设计是有道理的。但请注意,由于KafkaConsumerKafkaProducer无法与您分享,因此资源密集程度更高。