Error handling 如何处理未授权访问的主题。。。卡夫卡河

Error handling 如何处理未授权访问的主题。。。卡夫卡河,error-handling,apache-kafka,authorization,apache-kafka-streams,Error Handling,Apache Kafka,Authorization,Apache Kafka Streams,情况如下 我们在Kafka Broker中设置了SSL+ACL 我们正在设置stream,它读取来自两个主题的消息: KStream<String, String> stringInput = kBuilder.stream( STRING_SERDE, STRING_SERDE, inTopicName ); stringInput .filter( streamFilter::passOrFilterMessages ) .map( processor

情况如下

我们在Kafka Broker中设置了SSL+ACL

我们正在设置stream,它读取来自两个主题的消息:

KStream<String, String> stringInput 
    = kBuilder.stream( STRING_SERDE, STRING_SERDE, inTopicName );

stringInput
    .filter( streamFilter::passOrFilterMessages )
    .map( processor )
    .to( outTopicName );
问题如下。例如,如果在一个主题中,证书不再有效。流正在引发未授权访问主题的异常。。。 到目前为止还不错

但是异常是由常规错误处理程序处理的,因此即使第二个主题没有问题,整个应用程序也会停止

问题是,如何处理每个主题的此异常? 如何避免由于单个主题的授权问题而导致整个应用程序在某个时刻停止的情况


我理解,若代理不可用,那个么完整的应用程序可能会停止。但是,如果只有一个主题不可用,则单个流将停止,而不是完整的应用程序,或者?

根据设计,卡夫卡流将拓扑视为一个,无法区分这两个部分。对于您的特定情况,当您循环并构建到独立的管道时,您可以在同一个应用程序/JVM中并行运行两个KafkaStreams实例,以将它们彼此隔离。因此,如果一个失败,另一个不会受到影响。两个实例都需要使用两个不同的application.id

streams.setUncaughtExceptionHandler( ( Thread t, Throwable e ) -> {
                    synchronized ( this ) {
                        LOG.fatal( ... );
                        this.stop();
                    }
                }
        );