在我的 Kafka Streams 应用程序中,我有以下 2 个线程:
我想知道我的应用程序在线程安全性方面是否可以。我不太担心 ReadOnlyWindowStore 因为 javadoc (link) 说:
实现应该是线程安全的,因为需要并发读取和写入。
但是至于
KafkaStreams#store
,我不太确定从单独的线程调用是否可以。我担心的一件事是它涉及 HashMap,它不是线程安全的here。 KafkaStreams#removeStreamThread() 调用可以改变此 HashMap 对象。鉴于此,我不太确定这是否被设计为线程安全的。
我的问题是:从与实例化 KafkaStreams 对象的线程不同的线程中调用 KafkaStreams#store 是否可以?或者在同一线程中调用 store() 方法并仅与其他线程共享 ReadOnlyWindowStore 实例会更好吗? KafkaStream 类是否设计为线程安全的?
事实证明,实际上从 Kafka Streams 3.6.1 开始这不是线程安全的。更多详细信息可以在https://issues.apache.org/jira/browse/KAFKA-16055
找到