What if you could move data from Kafka to any system without writing a single line of code?
Why Sink connectors in Kafka? - Purpose & Use Cases
Imagine you have a stream of data coming from many sources, and you want to save this data into a database or a file system manually. You would have to write custom code to read each message, transform it, and then insert it into the target system one by one.
This manual method is slow and error-prone because you must handle every detail yourself: connection management, data format conversion, error handling, and retries. It quickly becomes overwhelming and hard to maintain as data volume grows.
Sink connectors automate this process by acting as ready-made bridges that take data from Kafka topics and write it directly to your target systems. They handle all the complex details for you, making data integration smooth and reliable.
while True: msg = kafka_consumer.poll() if msg is not None: db.insert(transform(msg))
configure_sink_connector({
'connector.class': 'JdbcSinkConnector',
'topics': 'my_topic',
'connection.url': 'jdbc:mysql://...',
...
})Sink connectors let you easily and reliably move streaming data into databases, search engines, or storage systems without writing complex code.
A company streams user activity events into Kafka and uses a sink connector to automatically load this data into a data warehouse for real-time analytics.
Manual data transfer from Kafka is slow and error-prone.
Sink connectors automate and simplify data export from Kafka topics.
This enables reliable, scalable integration with many target systems.
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
