I am little bit confused about the wording about this subject in kafka documentation, so I want to ask here that I am interpreting the things correctly here or not?
So if I understand this correctly only way to scale a Kafka Stream application is to start a new instance of the application (or increase the number of stream threads in application ), this will insure that there will be more consumers under consumerGroup('application.id'), so I can scale my stream application up to number of partitions of the topic (actually what happens if my Stream Topology connected to several topics, lets say TopicA with 5 partition and topicB with 3 I joined the streams for TopicA and TopicB, I am guessing I can scale up to 3 instances/threads in this case).
Now lets say I have a topicA with 5 partitions and I started 3 instances of my application and if I configured KTable in my topology, every KTable will contain information from certain partition and I have to find out over Metadata on which instance(partition) my Key is, so what happens when I start a 4th instance, lets say the Key/Value that was KTable on instance3 can now go to KTable on instance4, isn't it? One side question how long will such rebalancing can be (I think it depends on Topic size, so let's say it will took 1 minute, will my application who is querying KTable will be unresponsive during this operation?)
A side question, will this mechanism works exactly same for 'streamBuilder.table(..)' and 'streambuilder.groupByKey(..).reduce(..)''?
And one final question, again a Topic with 5 partitions but instead of starting 3 instances of the application, I started one instance with 3 stream threads (num.stream.threads = 3) will I have again 3 KTable's representing 5 partitions, will it behave exactly the same as increasing the instances number if I change thread size 3 to 4.
Thx for answers..