如何处理未经授权访问Kafka Streams中的主题...

时间:2018-03-23 15:25:32

标签: error-handling apache-kafka authorization apache-kafka-streams

情况如下。

我们在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可能会停止。但是如果只有一个主题不可用,那么单个流应该停止,而不是完整的应用程序,或者?

1 个答案:

答案 0 :(得分:1)

按照设计,Kafka Streams将拓扑视为一个,无法区分两个部分。对于您的特定情况,当您循环并构建到独立管道时,您可以并行运行两个KafkaStreams实例(在同一个应用程序/ JVM中)以将两者相互隔离。因此,如果一个失败,另一个不受影响。您需要为两个实例使用两个不同的application.id