Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Not A Problem
-
2.1.0
-
None
-
None
Description
As I understand and as it stands, one Kafka Consumer is created for each topic partition in the source Kafka topics, and they're cached.
In my opinion, that makes the design an anti pattern for Kafka and highly unefficient:
- Each Kafka consumer creates a connection to Kafka
- Spark doesn't leverage the power of the Kafka consumers, which is that it automatically assigns and balances partitions amongst all the consumers that share the same group.id
- You can still cache your Kafka consumer even if it has multiple partitions.
I'm not sure about how that translates to the spark underlying RDD architecture, but from a Kafka standpoint, I believe creating one consumer per partition is a big overhead, and a risk as the user may have to increase the spark.streaming.kafka.consumer.cache.maxCapacity parameter.
Happy to discuss to understand the rationale