情况如下。
我们在Kafka Broker中设置了SSL + ACL。
我们正在设置流,它会从两个主题中读取消息:
KStream<String, String> stringInput
= kBuilder.stream( STRING_SERDE, STRING_SERDE, inTopicName );
stringInput
.filter( streamFilter::passOrFilterMessages )
.map( processor )
.to( outTopicName );
完成两次(在循环中)。 然后我们设置一般错误处理程序:
streams.setUncaughtExceptionHandler( ( Thread t, Throwable e ) -> {
synchronized ( this ) {
LOG.fatal( ... );
this.stop();
}
}
);
问题如下。例如,如果在一个主题中证书不再有效。流正在抛出异常未授权访问主题... 到现在为止还挺好。
但异常由一般错误处理程序处理,因此即使第二个主题没有问题,整个应用程序也会停止。
问题是,如何处理每个主题的此异常? 如何避免由于一个 单个主题出现授权问题而导致应用程序停止运行的情况?
我了解如果Broker不可用,那么完整的app可能会停止。但是如果只有一个主题不可用,那么单个流应该停止,而不是完整的应用程序,或者?
答案 0 :(得分:1)
按照设计,Kafka Streams将拓扑视为一个,无法区分两个部分。对于您的特定情况,当您循环并构建到独立管道时,您可以并行运行两个KafkaStreams
实例(在同一个应用程序/ JVM中)以将两者相互隔离。因此,如果一个失败,另一个不受影响。您需要为两个实例使用两个不同的application.id
。