我有一个用一个线程运行的 Kafka-Streams 应用程序,用一个分区处理一个主题就好了。
我需要同时运行此应用程序的多个实例来处理不同的主题。在我当前的场景中,所有主题都只有一个分区。
当我运行同一应用程序的新实例(具有相同的APPLICATION_ID)并处理不同的主题时,Streams 客户端不会在此新应用程序中创建新任务。第一个实例继续处理任务 0_0 中的第一个主题,第二个实例在没有和分配的分区执行 noghting 的情况下等待。
我知道我只使用一个分区的主题,但在这种情况下,如果我有两个实例和两个主题,其中一个分区要处理,从而形成两个分区,为什么不能同时处理带有单个分区的两个主题时间,在每种情况下?
我怀疑它与StreamsPartitionAssignor 有关系,但在 Kafka Streams 应用程序中无法更改该分配策略:
Kafka Streams 不允许使用自定义分区分配器。如果您自己设置,它将被 StreamsPartitionAssignor [1] 覆盖。这需要确保 - 如果可能 - 在重新平衡期间将分区重新分配给相同的使用者(即粘性)。
编辑:
应用拓扑:
[2019-11-20 09:36:35,406] [INFO] stream-thread [avro-to-json-d07ad9ad-f4b6-4787-96cf-19c48e72ad46-StreamThread-1] Starting (org.apache.kafka.streams.processor.internals.StreamThread)
[2019-11-20 09:36:35,407] [INFO] stream-thread [avro-to-json-d07ad9ad-f4b6-4787-96cf-19c48e72ad46-StreamThread-1] State transition from CREATED to RUNNING (org.apache.kafka.streams.processor.internals.StreamThread)
[2019-11-20 09:36:35,407] [INFO] stream-client [avro-to-json-d07ad9ad-f4b6-4787-96cf-19c48e72ad46] Started Streams client (org.apache.kafka.streams.KafkaStreams)
Topologies:
Sub-topology: 0
Source: KSTREAM-SOURCE-0000000000 (topics: [])
--> KSTREAM-MAP-0000000001
Processor: KSTREAM-MAP-0000000001 (stores: [])
--> KSTREAM-MAP-0000000002
<-- KSTREAM-SOURCE-0000000000
Processor: KSTREAM-MAP-0000000002 (stores: …Run Code Online (Sandbox Code Playgroud)