Client authentication configuration in Kafka - Time & Space Complexity
When setting up client authentication in Kafka, it's important to understand how the configuration process scales as the number of clients grows.
We want to know how the time to authenticate clients changes when more clients connect.
Analyze the time complexity of the following Kafka client authentication setup code.
Properties props = new Properties();
props.put("security.protocol", "SASL_SSL");
props.put("sasl.mechanism", "PLAIN");
props.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"user\" password=\"pass\";");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("topic"));
consumer.poll(Duration.ofMillis(100));
This code configures a Kafka consumer with SASL/PLAIN authentication and connects to a topic.
Look at what repeats during client authentication.
- Primary operation: Authentication handshake between client and broker.
- How many times: Once per client connection attempt.
As the number of clients increases, the total authentication work grows.
| Number of Clients (n) | Approx. Authentication Operations |
|---|---|
| 10 | 10 |
| 100 | 100 |
| 1000 | 1000 |
Pattern observation: Each new client adds a fixed amount of authentication work, so total work grows linearly.
Time Complexity: O(n)
This means the time to authenticate clients grows directly in proportion to the number of clients.
[X] Wrong: "Authentication time stays the same no matter how many clients connect."
[OK] Correct: Each client must complete its own authentication, so more clients mean more total work.
Understanding how client authentication scales helps you design systems that handle many users smoothly and securely.
What if we changed from SASL/PLAIN to a more complex authentication mechanism? How would the time complexity change?
Practice
Solution
Step 1: Understand client authentication
Client authentication is about confirming who is connecting to Kafka to ensure security.Step 2: Identify the purpose in Kafka context
Kafka uses client authentication to verify client identity before allowing access.Final Answer:
To verify the identity of clients connecting to the Kafka broker -> Option AQuick Check:
Client authentication = verify identity [OK]
- Confusing authentication with message compression
- Thinking authentication speeds up delivery
- Mixing authentication with data storage
Solution
Step 1: Recall Kafka SSL config property
The correct property to enable SSL is 'security.protocol' set to 'SSL'.Step 2: Check other options for correctness
Other options are not valid Kafka config keys for SSL authentication.Final Answer:
security.protocol=SSL -> Option CQuick Check:
SSL enabled by security.protocol=SSL [OK]
- Using non-existent properties like ssl.enabled
- Confusing property names with auth.method
- Adding extra words like enable.ssl.auth
security.protocol=SASL_SSL sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="user" password="pass";
What type of client authentication is configured?
Solution
Step 1: Analyze security.protocol and sasl.mechanism
security.protocol=SASL_SSL means SASL authentication over SSL. sasl.mechanism=PLAIN means using PLAIN SASL mechanism.Step 2: Confirm authentication type
The config uses SASL PLAIN mechanism secured by SSL transport.Final Answer:
SASL with PLAIN mechanism over SSL -> Option BQuick Check:
SASL_SSL + PLAIN = SASL PLAIN over SSL [OK]
- Ignoring sasl.mechanism and assuming only SSL
- Confusing PLAIN with SCRAM mechanism
- Thinking no authentication is set
security.protocol=SSL ssl.keystore.location=/path/to/keystore ssl.keystore.password=wrongpass
The client fails to authenticate. What is the most likely cause?
Solution
Step 1: Check SSL keystore config
The keystore password is set to 'wrongpass', which likely does not match the actual password.Step 2: Evaluate other options
Missing sasl.mechanism is irrelevant for SSL-only config. PLAINTEXT disables security. Keystore location is required.Final Answer:
Incorrect keystore password -> Option AQuick Check:
Wrong password causes SSL auth failure [OK]
- Assuming sasl.mechanism is needed for SSL-only
- Changing security.protocol to PLAINTEXT by mistake
- Ignoring keystore location requirement
Solution
Step 1: Identify correct security.protocol for SASL SCRAM over SSL
It must be 'SASL_SSL' to use SASL authentication over SSL.Step 2: Match sasl.mechanism and jaas config
For SCRAM-SHA-512, sasl.mechanism must be 'SCRAM-SHA-512' and jaas config must use ScramLoginModule.Step 3: Verify options
security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="pass"; matches all requirements. security.protocol=SSL sasl.mechanism=SCRAM-SHA-512 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="pass"; misses SASL in protocol. security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-512 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="pass"; uses PLAINTEXT transport. security.protocol=SASL_SSL sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="user" password="pass"; uses PLAIN mechanism, not SCRAM.Final Answer:
security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="pass"; -> Option DQuick Check:
SASL_SSL + SCRAM-SHA-512 + ScramLoginModule = security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="pass"; [OK]
- Using SSL without SASL for SCRAM
- Mixing PLAIN mechanism with SCRAM config
- Setting security.protocol to PLAINTEXT
Ready to prove it?
Pass the test and this pattern moves unknown
