Bird
Raised Fist0
Kafkadevops~3 mins

Why Sink connectors in Kafka? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if you could move data from Kafka to any system without writing a single line of code?

The Scenario

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.

The Problem

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.

The Solution

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.

Before vs After
✗ Before
while True:
    msg = kafka_consumer.poll()
    if msg is not None:
        db.insert(transform(msg))
✓ After
configure_sink_connector({
  'connector.class': 'JdbcSinkConnector',
  'topics': 'my_topic',
  'connection.url': 'jdbc:mysql://...',
  ...
})
What It Enables

Sink connectors let you easily and reliably move streaming data into databases, search engines, or storage systems without writing complex code.

Real Life Example

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.

Key Takeaways

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

(1/5)
1.

What is the main purpose of a Kafka sink connector?

easy
A. To create new Kafka topics dynamically
B. To move data from external systems into Kafka topics
C. To monitor Kafka cluster health
D. To move data from Kafka topics to external systems automatically

Solution

  1. Step 1: Understand the role of sink connectors

    Sink connectors are designed to export data from Kafka topics to other systems.
  2. Step 2: Differentiate from source connectors

    Source connectors import data into Kafka, while sink connectors export data out.
  3. Final Answer:

    To move data from Kafka topics to external systems automatically -> Option D
  4. Quick Check:

    Sink connector = export data from Kafka [OK]
Hint: Sink connectors export data out of Kafka topics [OK]
Common Mistakes:
  • Confusing sink with source connectors
  • Thinking sink connectors create topics
  • Assuming sink connectors monitor Kafka health
2.

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"
  }
}
easy
A. "topics"
B. "topic"
C. "topic_name"
D. "source.topics"

Solution

  1. Step 1: Check the standard Kafka Connect config field

    The field to specify Kafka topics in sink connector config is "topics" (plural).
  2. Step 2: Verify the example JSON

    The example uses "topics": "my_topic", which is correct syntax.
  3. Final Answer:

    "topics" -> Option A
  4. Quick Check:

    Kafka sink config uses "topics" field [OK]
Hint: Use "topics" (plural) to list Kafka topics in config [OK]
Common Mistakes:
  • Using "topic" (singular) instead of "topics"
  • Using non-standard fields like "topic_name"
  • Confusing source connector fields with sink
3.

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"
  }
}
medium
A. A Kafka topic named 'logs'
B. A file located at /tmp/output.log
C. A database table named 'logs'
D. A remote HTTP endpoint

Solution

  1. Step 1: Identify the connector class

    The connector class is "FileStreamSink", which writes data to a file.
  2. Step 2: Check the "file" config field

    The "file" field specifies the destination file path "/tmp/output.log".
  3. Final Answer:

    A file located at /tmp/output.log -> Option B
  4. Quick Check:

    FileStreamSink writes to file path [OK]
Hint: FileStreamSink writes Kafka data to a file path [OK]
Common Mistakes:
  • Assuming data goes back to Kafka topic
  • Confusing sink with source connectors
  • Thinking it writes to a database or HTTP
4.

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"
  }
}
medium
A. Invalid JDBC URL format
B. Connector class name is incorrect
C. Missing 'topics' field; uses 'topic' instead
D. Missing 'name' field

Solution

  1. Step 1: Check the topic field name

    The config uses "topic" (singular), but Kafka sink connectors require "topics" (plural).
  2. Step 2: Verify other fields

    The JDBC URL and connector class are correctly formatted, and "name" is present.
  3. Final Answer:

    Missing 'topics' field; uses 'topic' instead -> Option C
  4. Quick Check:

    Use "topics" not "topic" in sink config [OK]
Hint: Use plural "topics" field in sink connector config [OK]
Common Mistakes:
  • Using singular "topic" instead of "topics"
  • Assuming JDBC URL is wrong without checking
  • Thinking connector class name is invalid
5.

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"
  }
}
hard
A. This config exports all topics to one table named 'combined_table'
B. Each topic will create a separate table ignoring 'table.name.format'
C. The connector will fail because multiple topics are not allowed
D. Data will be merged but only from 'topic1'

Solution

  1. Step 1: Understand 'topics' field with multiple topics

    The "topics" field lists multiple topics separated by commas, which is valid.
  2. 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.
  3. Step 3: Confirm connector behavior

    The JDBC sink connector supports writing multiple topics to one table if configured this way.
  4. Final Answer:

    This config exports all topics to one table named 'combined_table' -> Option A
  5. Quick Check:

    Multiple topics + fixed table name = single table export [OK]
Hint: Use comma-separated topics and fixed table name for single table export [OK]
Common Mistakes:
  • Assuming multiple topics create separate tables automatically
  • Thinking multiple topics are not allowed in sink config
  • Ignoring 'table.name.format' effect
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard