问题:在一个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
答案 0 :(得分:1)
如果KafkaStreams
实例最终处于ERROR
状态,则需要close()
它并创建一个新实例,您可以开始替换旧实例。
在单个JVM中运行多个KafkaStreams
实例:这基本上没问题。请注意,如果这些实例属于同一个应用程序,则需要使用不同的状态目录对它们进行配置,以便将它们彼此隔离。否则,它们会自动相互隔离。
对我来说,你的设计是有道理的。但请注意,由于KafkaConsumer
和KafkaProducer
无法与您分享,因此资源密集程度更高。