Static group membership in Kafka - Step-by-Step Execution
consumerProps.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group"); consumerProps.put(ConsumerConfig.GROUP_INSTANCE_ID_CONFIG, "consumer-1"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps); consumer.subscribe(Collections.singletonList("my-topic")); consumer.poll(Duration.ofMillis(100));
| Step | Action | Static Member ID Provided? | Group Coordinator Response | Result |
|---|---|---|---|---|
| 1 | Consumer starts and sends JoinGroup request | Yes (consumer-1) | Accepts static member | Consumer joins group with static ID |
| 2 | Consumer polls messages | Yes (consumer-1) | Maintains session | Consumer processes messages |
| 3 | Consumer restarts and re-joins group | Yes (consumer-1) | Recognizes static member | No rebalance triggered, session continues |
| 4 | Another consumer joins with dynamic ID | No | Triggers rebalance | Group rebalances, static member remains stable |
| 5 | Static member leaves group | Yes (consumer-1) | Removes member | Group rebalances to exclude static member |
| Variable | Start | After Step 1 | After Step 3 | After Step 4 | Final |
|---|---|---|---|---|---|
| memberId | null | consumer-1 | consumer-1 | consumer-1 | null |
| groupState | empty | joined | joined | rebalancing | left |
| rebalanceNeeded | false | false | false | true | false |
Static group membership in Kafka: - Use GROUP_INSTANCE_ID_CONFIG to set static member ID - Static members keep same ID across restarts - Avoids unnecessary group rebalances - Coordinator recognizes static IDs to maintain stability - Helps improve consumer group stability and performance
Practice
What is the main purpose of using group.instance.id in Kafka consumer groups?
Solution
Step 1: Understand the role of
This configuration assigns a unique and stable identity to a Kafka consumer within a group.group.instance.idStep 2: Connect stable identity to static group membership
With a stable identity, Kafka can avoid unnecessary rebalances when a consumer restarts briefly, improving stability.Final Answer:
To assign a stable identity to a consumer and enable static group membership -> Option DQuick Check:
Stable consumer identity = static group membership [OK]
- Confusing
group.instance.idwith partition count - Thinking it controls offset commit frequency
- Assuming it encrypts messages
Which of the following is the correct way to set group.instance.id in a Kafka consumer configuration?
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
// What is the correct line to set static membership?Solution
Step 1: Recall the exact property name for static membership
The correct property to set a static consumer ID isgroup.instance.id.Step 2: Match the correct syntax in Java Properties
Usingprops.put("group.instance.id", "consumer-1")correctly sets the static ID.Final Answer:
props.put("group.instance.id", "consumer-1"); -> Option AQuick Check:
Correct property name = group.instance.id [OK]
- Swapping words in the property name
- Using incomplete or incorrect property keys
- Confusing with group.id
Consider this Kafka consumer group with static membership enabled using group.instance.id. If a consumer with group.instance.id = "consumer-1" disconnects briefly and reconnects, what happens?
Solution
Step 1: Understand static membership behavior on brief disconnect
Static membership keeps the consumer identity stable, so brief disconnects do not cause rebalances.Step 2: Identify the effect on partition assignment
The consumer resumes with the same partitions without triggering a rebalance, improving latency and stability.Final Answer:
The consumer resumes without triggering a rebalance -> Option CQuick Check:
Static membership avoids rebalance on brief disconnect [OK]
- Assuming every disconnect triggers rebalance
- Thinking consumer is removed permanently
- Believing new ID is required on reconnect
Given this Kafka consumer config snippet, identify the error preventing static group membership:
props.put("group.id", "my-group");
props.put("group.instance.id", "consumer-1");
props.put("session.timeout.ms", "10000");
// Missing property?Solution
Step 1: Check required properties for static membership
Static membership requiresgroup.protocol.typeto be set toconsumerexplicitly in some Kafka versions.Step 2: Identify missing property in config
The snippet lacksgroup.protocol.type, which can prevent static membership from working properly.Final Answer:
Missinggroup.protocol.typeset toconsumer-> Option AQuick Check:
Static membership needs group.protocol.type=consumer [OK]
- Assuming auto commit affects static membership
- Confusing client.id with group.instance.id
- Ignoring group.protocol.type requirement
You have a Kafka consumer group with 3 consumers using static membership via group.instance.id. One consumer crashes and restarts quickly with the same group.instance.id. What is the expected behavior and why is static membership important here?
Solution
Step 1: Analyze static membership effect on consumer restart
Static membership keeps the consumer identity stable, so a quick restart does not cause a rebalance.Step 2: Understand impact on group processing
Because no rebalance occurs, partition assignments remain unchanged, allowing smooth and low-latency processing.Final Answer:
The group avoids a rebalance, so processing continues smoothly with minimal delay -> Option BQuick Check:
Static membership prevents rebalance on quick restart [OK]
- Expecting rebalance on every consumer restart
- Thinking new ID is required after crash
- Assuming group pauses automatically
Ready to prove it?
Pass the test and this pattern moves unknown
