Sink connectors in Kafka - Time & Space Complexity
When using sink connectors in Kafka, it's important to understand how the processing time changes as the amount of data grows.
We want to know how the time to send data from Kafka to another system increases when more messages arrive.
Analyze the time complexity of the following Kafka sink connector code snippet.
public void put(Collection<SinkRecord> records) {
for (SinkRecord record : records) {
// Process and send each record to the target system
sendToTarget(record);
}
}
This code takes a batch of records and sends each one to the target system in order.
Look at what repeats in this code.
- Primary operation: Looping through each record in the batch.
- How many times: Once for every record in the input collection.
As the number of records increases, the time to process grows in a straight line.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 sends |
| 100 | 100 sends |
| 1000 | 1000 sends |
Pattern observation: Doubling the number of records roughly doubles the work done.
Time Complexity: O(n)
This means the time to process grows directly with the number of records.
[X] Wrong: "Processing a batch of records takes the same time no matter how many records are in it."
[OK] Correct: Each record needs to be handled, so more records mean more work and more time.
Understanding how sink connectors handle data helps you explain how systems scale with load, a key skill in real projects.
"What if the sendToTarget method batches multiple records internally? How would that affect the time complexity?"
Practice
What is the main purpose of a Kafka sink connector?
Solution
Step 1: Understand the role of sink connectors
Sink connectors are designed to export data from Kafka topics to other systems.Step 2: Differentiate from source connectors
Source connectors import data into Kafka, while sink connectors export data out.Final Answer:
To move data from Kafka topics to external systems automatically -> Option DQuick Check:
Sink connector = export data from Kafka [OK]
- Confusing sink with source connectors
- Thinking sink connectors create topics
- Assuming sink connectors monitor Kafka health
Which of the following is a correct JSON field to specify the Kafka topic for a sink connector configuration?
{
"name": "my-sink-connector",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"topics": "my_topic",
"connection.url": "jdbc:mysql://localhost:3306/mydb"
}
}Solution
Step 1: Check the standard Kafka Connect config field
The field to specify Kafka topics in sink connector config is "topics" (plural).Step 2: Verify the example JSON
The example uses "topics": "my_topic", which is correct syntax.Final Answer:
"topics" -> Option AQuick Check:
Kafka sink config uses "topics" field [OK]
- Using "topic" (singular) instead of "topics"
- Using non-standard fields like "topic_name"
- Confusing source connector fields with sink
Given this sink connector config snippet, what will be the destination system?
{
"name": "file-sink-connector",
"config": {
"connector.class": "FileStreamSink",
"topics": "logs",
"file": "/tmp/output.log"
}
}Solution
Step 1: Identify the connector class
The connector class is "FileStreamSink", which writes data to a file.Step 2: Check the "file" config field
The "file" field specifies the destination file path "/tmp/output.log".Final Answer:
A file located at /tmp/output.log -> Option BQuick Check:
FileStreamSink writes to file path [OK]
- Assuming data goes back to Kafka topic
- Confusing sink with source connectors
- Thinking it writes to a database or HTTP
Identify the error in this sink connector config JSON:
{
"name": "jdbc-sink",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"topic": "orders",
"connection.url": "jdbc:postgresql://localhost:5432/shop"
}
}Solution
Step 1: Check the topic field name
The config uses "topic" (singular), but Kafka sink connectors require "topics" (plural).Step 2: Verify other fields
The JDBC URL and connector class are correctly formatted, and "name" is present.Final Answer:
Missing 'topics' field; uses 'topic' instead -> Option CQuick Check:
Use "topics" not "topic" in sink config [OK]
- Using singular "topic" instead of "topics"
- Assuming JDBC URL is wrong without checking
- Thinking connector class name is invalid
You want to export data from multiple Kafka topics to a single database table using a JDBC sink connector. Which configuration approach is correct?
{
"name": "multi-topic-jdbc-sink",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"topics": "topic1,topic2,topic3",
"connection.url": "jdbc:mysql://localhost:3306/mydb",
"table.name.format": "combined_table"
}
}Solution
Step 1: Understand 'topics' field with multiple topics
The "topics" field lists multiple topics separated by commas, which is valid.Step 2: Check 'table.name.format' usage
Setting "table.name.format" to a fixed table name causes all data to go into that single table.Step 3: Confirm connector behavior
The JDBC sink connector supports writing multiple topics to one table if configured this way.Final Answer:
This config exports all topics to one table named 'combined_table' -> Option AQuick Check:
Multiple topics + fixed table name = single table export [OK]
- Assuming multiple topics create separate tables automatically
- Thinking multiple topics are not allowed in sink config
- Ignoring 'table.name.format' effect
Ready to prove it?
Pass the test and this pattern moves unknown
