I'm checking Key_Shared feature and faced some unexpected behavior.
What happened roughly is, multiple messages with the same key go to
different consumers (consumer threads) even though Key_Shared is set.
Also, the distribution of messages to consumers is quite skewed.

Let me explain what I did, what happened, and what was my expectation
in more detail.

What I did:
1. Created a partitioned topic named
"persistent://my-tenant/my-namespace/my-topic8" (# of partitions is 8)
2. Ran a producer (the code is here.
  - it just produces 10000 messages with SinglePartition. each message
has a key (from "0" to "999")
3. Ran a consumer process (the code is here.
  - It consumes messages with Key_Shared and 20 consumer threads set
by ClientBuilder.listenerThreads(20).

What happened:
Multiple messages with the same key go to different consumer threads.
For example, the following is a set of messages with key "100" but
some goes to b4fa8 others go to 96ee9.

#ConsumerName key
b4fa8 100
b4fa8 100
b4fa8 100
b4fa8 100
96ee9 100
96ee9 100
96ee9 100
96ee9 100
96ee9 100
96ee9 100

Also, distribution of messages are pretty skewed.

# numOfMessages consumerName
 289 15588
 346 21dcb
 138 284ca
 379 29138
 195 30276
 533 500ae
 375 5c4cb
 338 654bf
 194 699fe
 271 6c6c8
 220 73691
 152 7f5d1
 372 96ee9
 359 9b55d
 315 a22fd
 196 a752a
4243 b4fa8 <- this consumes most of the messages
 387 cc11a
 307 d0f5d
 391 ec8b8

What I expected:

First, multiple messages with the same key go to the same consumer
thread as described in below.
Second, messages are almost equally balanced between consumer threads.

So, am I doing something wrong ? or my expectation is wrong ?
If my expectation is correct, It would be great if anyone can teach me
how to make it happen.

Best regards,

Reply via email to