Hi team! I have a use case where I want to run multiple separate Flink job instances that share Kafka topic partitions via Kafka's
native consumer group balancing, rather than having each Flink job consume all partitions.
Current behavior: Flink's KafkaSource automatically assigns all topic partitions to a single job, managing offsets internally for
exactly-once semantics.
Desired behavior: Multiple Flink job instances with the same Kafka consumer group ID, where Kafka's consumer group coordinator
distributes partitions across instances (e.g., Instance A gets partition 0, Instance B gets partition 1).
Questions:
1. Is there a way to configure KafkaSource to use Kafka's consumer group partition assignment instead of Flink's internal assignment?
2. How would this impact parallelism within each Flink job? If I use Kafka's subscribe mechanism, would I need to set parallelism=1
to avoid conflicts between Flink's subtasks and Kafka's partition assignment?
3. How would checkpointing work in this scenario? Would each Flink instance only checkpoint offsets for its assigned partitions? What
happens during partition rebalancing when a failed instance's partitions get reassigned to surviving instances?
4. Are there any existing patterns or configurations for this use case?
Context: We don't require exactly-once semantics and prefer the operational flexibility of having independent Flink instances that
can scale based on Kafka's partition distribution. We're particularly concerned about checkpoint recovery behavior when Kafka
rebalances partitions across instances.
Any guidance or alternative approaches would be appreciated!