Apache Kafka āļŠāļģāļŦāļĢāļąāļšāļ§āļīāļĻāļ§āļāļĢāļ‚āđ‰āļ­āļĄāļđāļĨ: Streaming, Partitions āđāļĨāļ°āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āđ€āļˆāļēāļ°āļĨāļķāļ Apache Kafka āļŠāļģāļŦāļĢāļąāļšāļ§āļīāļĻāļ§āļāļĢāļ‚āđ‰āļ­āļĄāļđāļĨ āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ streaming āļāļĨāļĒāļļāļ—āļ˜āđŒ partition consumer groups āđāļĨāļ°āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒ āļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡āļ”āđ‰āļ§āļĒ Kafka 4.x āđāļĨāļ° KRaft

āđāļœāļ™āļœāļąāļ‡āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ streaming āļ‚āļ­āļ‡ Apache Kafka āļžāļĢāđ‰āļ­āļĄ partition āđāļĨāļ°āļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ

Apache Kafka āđ€āļ›āđ‡āļ™āļŦāļąāļ§āđƒāļˆāļ‚āļ­āļ‡ stack āļ”āđ‰āļēāļ™ data engineering āļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆāđ€āļāļ·āļ­āļšāļ—āļļāļāđāļŦāđˆāļ‡ āļĢāļ­āļ‡āļĢāļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļŦāļĨāļēāļĒāļĨāđ‰āļēāļ™āļĨāđ‰āļēāļ™āļ„āļĢāļąāđ‰āļ‡āļ•āđˆāļ­āļ§āļąāļ™āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ—āļļāļāļ‚āļ™āļēāļ” āļ”āđ‰āļ§āļĒ Kafka 4.x āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļšāļ™ KRaft āļ­āļĒāđˆāļēāļ‡āđ€āļ•āđ‡āļĄāļĢāļđāļ›āđāļšāļš (āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļžāļķāđˆāļ‡ ZooKeeper āļ­āļĩāļāļ•āđˆāļ­āđ„āļ›) āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļ™āļĩāđ‰āļˆāļķāļ‡āļ”āļđāđāļĨāļĢāļąāļāļĐāļēāļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆāļĒāļąāļ‡āļ„āļ‡āļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āđāļšāļšāđ€āļ”āļīāļĄāļ—āļĩāđˆāļ—āļģāđƒāļŦāđ‰ Kafka āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āļĄāļēāļ•āļĢāļāļēāļ™āļ­āļļāļ•āļŠāļēāļŦāļāļĢāļĢāļĄāļŠāļģāļŦāļĢāļąāļš data pipeline āđāļšāļšāđ€āļĢāļĩāļĒāļĨāđ„āļ—āļĄāđŒ

Kafka 4.x: KRaft āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™

āļ•āļąāđ‰āļ‡āđāļ•āđˆ Apache Kafka 4.0 āđ€āļ›āđ‡āļ™āļ•āđ‰āļ™āđ„āļ› āđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ ZooKeeper āļ­āļĩāļāļ•āđˆāļ­āđ„āļ› KRaft (Kafka Raft) āļˆāļąāļ”āļāļēāļĢ metadata āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđāļšāļš native āļĨāļ”āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđƒāļ™āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļ‡āļēāļ™āđāļĨāļ°āļ•āļąāļ”āļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļ­āļ­āļāļˆāļēāļ deployment āļĢāļ°āļ”āļąāļš production

āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ Streaming āļ‚āļ­āļ‡ Kafka āļŠāļģāļŦāļĢāļąāļš Data Pipeline

Kafka āļ—āļģāļ‡āļēāļ™āđ€āļŦāļĄāļ·āļ­āļ™ distributed commit log āļœāļđāđ‰āļœāļĨāļīāļ• (producer) āđ€āļžāļīāđˆāļĄ record āļ•āđˆāļ­āļ—āđ‰āļēāļĒ partition āļ‚āļ­āļ‡ topic āđāļĨāļ°āļœāļđāđ‰āļšāļĢāļīāđ‚āļ āļ„ (consumer) āļ­āđˆāļēāļ™ record āđ€āļŦāļĨāđˆāļēāļ™āļąāđ‰āļ™āļ•āļēāļĄāļĨāļģāļ”āļąāļš āļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļšāļš append-only āļ™āļĩāđ‰āļĢāļ­āļ‡āļĢāļąāļšāļ—āļąāđ‰āļ‡ streaming āđāļšāļšāđ€āļĢāļĩāļĒāļĨāđ„āļ—āļĄāđŒāđāļĨāļ°āļāļēāļĢ replay āđāļšāļš batch āļˆāļēāļ offset āđƒāļ”āļāđ‡āđ„āļ”āđ‰ āļ—āļģāđƒāļŦāđ‰ Kafka āđ€āļŦāļĄāļēāļ°āļŠāļĄāđ€āļ›āđ‡āļ™āļžāļīāđ€āļĻāļĐāļāļąāļšāļ‡āļēāļ™ data engineering āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļĢāļđāļ›āđāļšāļšāļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āļ­āļĒāđˆāļēāļ‡

āļ„āļĨāļąāļŠāđ€āļ•āļ­āļĢāđŒ Kafka āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ broker (āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ) topic (āļŠāđˆāļ­āļ‡āļ—āļēāļ‡āđ€āļŠāļīāļ‡āļ•āļĢāļĢāļāļ°) āđāļĨāļ° partition (shard āđ€āļŠāļīāļ‡āļāļēāļĒāļ āļēāļžāļ‚āļ­āļ‡ topic) āđāļ•āđˆāļĨāļ° partition āļ„āļ·āļ­āļĨāļģāļ”āļąāļš record āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļ‡āļ•āļēāļĄāļĨāļģāļ”āļąāļšāđāļĨāļ°āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ”āđ‰ broker āļŦāļ™āļķāđˆāļ‡āļ•āļąāļ§āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ›āđ‡āļ™ partition leader āļˆāļąāļ”āļāļēāļĢāļāļēāļĢāļ­āđˆāļēāļ™āđāļĨāļ°āđ€āļ‚āļĩāļĒāļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ follower replica āđ€āļāđ‡āļšāļŠāļģāđ€āļ™āļēāđ„āļ§āđ‰āđ€āļžāļ·āđˆāļ­ fault tolerance

āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ—āļēāļ‡āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļ—āļĩāđˆāļŠāļģāļ„āļąāļ: āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ–āļđāļāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļ āļēāļĒāđƒāļ™ partition āđ„āļĄāđˆāđƒāļŠāđˆāļ‚āđ‰āļēāļĄ partition āļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āđ€āļ”āļĩāļĒāļ§āļ™āļĩāđ‰āļāļģāļŦāļ™āļ”āļāļēāļĢāļ•āļąāļ”āļŠāļīāļ™āđƒāļˆāđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļš Kafka āļŠāđˆāļ§āļ™āđƒāļŦāļāđˆāđƒāļ™ data pipeline

yaml
# docker-compose.yml — Kafka 4.x KRaft cluster (no ZooKeeper)
services:
  kafka-1:
    image: apache/kafka:4.2.0
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093
      KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LOG_DIRS: /var/lib/kafka/data
      KAFKA_NUM_PARTITIONS: 6
      KAFKA_DEFAULT_REPLICATION_FACTOR: 3
      KAFKA_MIN_INSYNC_REPLICAS: 2
    ports:
      - "9092:9092"

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ™āļĩāđ‰āđ€āļĢāļīāđˆāļĄ broker āđ‚āļŦāļĄāļ” KRaft āļ—āļĩāđˆāļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ›āđ‡āļ™ controller āļ”āđ‰āļ§āļĒ āļ„āđˆāļē KAFKA_CONTROLLER_QUORUM_VOTERS āļĄāļēāđāļ—āļ™āļ—āļĩāđˆāļŠāļīāđˆāļ‡āļ—āļĩāđˆ ZooKeeper āđ€āļ„āļĒāļˆāļąāļ”āļāļēāļĢ āđ„āļ”āđ‰āđāļāđˆ āļāļēāļĢāđ€āļĨāļ·āļ­āļ leader, metadata āļ‚āļ­āļ‡ topic āđāļĨāļ°āļŠāļĄāļēāļŠāļīāļāļ‚āļ­āļ‡āļ„āļĨāļąāļŠāđ€āļ•āļ­āļĢāđŒ

āļāļĨāļĒāļļāļ—āļ˜āđŒ Partition āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡ Pipeline

Partition āļāļģāļŦāļ™āļ”āļ—āļąāđ‰āļ‡ parallelism āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļš āđāļĨāļ° throughput āļāļēāļĢāđ€āļĨāļ·āļ­āļāļˆāļģāļ™āļ§āļ™ partition āđāļĨāļ°āļāļĨāļĒāļļāļ—āļ˜āđŒ key āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļŠāđˆāļ‡āļœāļĨāđ‚āļ”āļĒāļ•āļĢāļ‡āļ•āđˆāļ­āļ„āļ§āļēāļĄāļ™āđˆāļēāđ€āļŠāļ·āđˆāļ­āļ–āļ·āļ­āļ‚āļ­āļ‡ pipeline āđāļĨāļ°āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ‚āļĒāļēāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ consumer

āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļāļˆāļģāļ™āļ§āļ™ partition:

  • āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ”āđ‰āļ§āļĒāļˆāļģāļ™āļ§āļ™ consumer āļ—āļĩāđˆāļ„āļēāļ”āļ§āđˆāļēāļˆāļ°āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ topic āļžāļĢāđ‰āļ­āļĄāļāļąāļ™
  • āđāļ•āđˆāļĨāļ° partition āļĢāļ­āļ‡āļĢāļąāļš throughput āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ„āļ”āđ‰āļ›āļĢāļ°āļĄāļēāļ“ 10 MB/āļ§āļīāļ™āļēāļ—āļĩāļšāļ™āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆ
  • āļˆāļģāļ™āļ§āļ™ partition āļ—āļĩāđˆāļĄāļēāļāļ‚āļķāđ‰āļ™āļˆāļ°āđ€āļžāļīāđˆāļĄ end-to-end latency āđ€āļĨāđ‡āļāļ™āđ‰āļ­āļĒ (āļĄāļĩāļāļēāļĢāđ€āļĨāļ·āļ­āļ leader āļĄāļēāļāļ‚āļķāđ‰āļ™ āļĄāļĩ file handle āļĄāļēāļāļ‚āļķāđ‰āļ™)
  • Kafka 4.x āļˆāļąāļ”āļāļēāļĢ partition āļŦāļĨāļēāļĒāļžāļąāļ™āļĢāļēāļĒāļāļēāļĢāļ•āđˆāļ­ broker āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļ”āđ‰āļ§āļĒāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ metadata āļ‚āļ­āļ‡ KRaft

āļāļēāļĢāđ€āļĨāļ·āļ­āļ partition key āļāļģāļŦāļ™āļ”āļ§āđˆāļē record āđƒāļ”āļˆāļ°āļĨāļ‡āđ„āļ›āļĒāļąāļ‡ partition āđƒāļ” record āļ—āļĩāđˆāļĄāļĩ key āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļˆāļ°āđ„āļ›āļĒāļąāļ‡ partition āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ€āļŠāļĄāļ­ āļ„āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļŠāļģāļŦāļĢāļąāļš key āļ™āļąāđ‰āļ™āđ„āļ§āđ‰

python
# partition_strategy.py — Choosing the right partition key
from confluent_kafka import Producer
import json

def create_producer():
    return Producer({
        'bootstrap.servers': 'kafka-1:9092',
        'acks': 'all',
        'enable.idempotence': True,
        'max.in.flight.requests.per.connection': 5
    })

def publish_order_event(producer, event):
    # Key by customer_id: all events for one customer stay ordered
    key = str(event['customer_id']).encode('utf-8')
    value = json.dumps(event).encode('utf-8')
    producer.produce(
        topic='order-events',
        key=key,
        value=value,
        headers=[('source', b'order-service'), ('version', b'2')]
    )
    producer.flush()

def publish_clickstream(producer, event):
    # Key by session_id: ordering within a session matters
    # NOT by user_id — one user may have multiple sessions
    key = str(event['session_id']).encode('utf-8')
    value = json.dumps(event).encode('utf-8')
    producer.produce(
        topic='clickstream',
        key=key,
        value=value
    )

āļāļēāļĢāđ€āļĨāļ·āļ­āļ customer_id āđāļ—āļ™ session_id āđ€āļ›āđ‡āļ™ partition key āļŠāļ°āļ—āđ‰āļ­āļ™āļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ—āļĩāđˆāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ„āļģāļŠāļąāđˆāļ‡āļ‹āļ·āđ‰āļ­āļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ•āđˆāļ­āļĨāļđāļāļ„āđ‰āļēāđ€āļžāļ·āđˆāļ­āļĢāļąāļāļĐāļēāļ„āļ§āļēāļĄāļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļ‚āļ­āļ‡āļ˜āļļāļĢāļāļĢāļĢāļĄ āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ clickstream āļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ•āđˆāļ­ session āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ‚āļķāđ‰āļ™āļĄāļēāđƒāļŦāļĄāđˆāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡

āļ„āļ§āļēāļĄāđ€āļŠāļĩāđˆāļĒāļ‡āļˆāļēāļ hot partition

āļŦāļēāļ key āļŦāļ™āļķāđˆāļ‡āļŠāļĢāđ‰āļēāļ‡ record āļĄāļēāļāļāļ§āđˆāļē key āļ­āļ·āđˆāļ™āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ™āļąāļĒāļŠāļģāļ„āļąāļ (āđ€āļŠāđˆāļ™ āļĨāļđāļāļ„āđ‰āļēāļĢāļ°āļ”āļąāļšāļ­āļ‡āļ„āđŒāļāļĢāđ€āļžāļĩāļĒāļ‡āļĢāļēāļĒāđ€āļ”āļĩāļĒāļ§āļŠāļĢāđ‰āļēāļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ 80%) partition āļ™āļąāđ‰āļ™āļˆāļ°āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āļ„āļ­āļ‚āļ§āļ” āļ„āļ§āļĢāļ•āļīāļ”āļ•āļēāļĄāļ•āļąāļ§āļŠāļĩāđ‰āļ§āļąāļ” partition lag āđāļĨāļ°āļžāļīāļˆāļēāļĢāļ“āļēāđƒāļŠāđ‰ composite key āļŦāļĢāļ·āļ­ custom partitioner āļŠāļģāļŦāļĢāļąāļš workload āļ—āļĩāđˆāļāļĢāļ°āļˆāļēāļĒāđ„āļĄāđˆāļŠāļĄāļ”āļļāļĨ

Consumer Groups āđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Offset

Consumer group āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ topic āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”āđ‰ Kafka āļˆāļąāļ”āļŠāļĢāļĢāđāļ•āđˆāļĨāļ° partition āđƒāļŦāđ‰āļāļąāļš consumer āļŦāļ™āļķāđˆāļ‡āļ•āļąāļ§āļ āļēāļĒāđƒāļ™āļāļĨāļļāđˆāļĄāđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ āļ”āļąāļ‡āļ™āļąāđ‰āļ™ parallelism āļŠāļđāļ‡āļŠāļļāļ”āļˆāļķāļ‡āđ€āļ—āđˆāļēāļāļąāļšāļˆāļģāļ™āļ§āļ™ partition

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ offset āļ„āļ§āļšāļ„āļļāļĄāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ‚āļ­āļ‡āļāļēāļĢāļŠāđˆāļ‡āļĄāļ­āļšāđāļšāļš exactly-once āđ€āļ—āļĩāļĒāļšāļāļąāļš at-least-once Kafka āđ€āļāđ‡āļš offset āļ—āļĩāđˆ commit āđ„āļ§āđ‰āđƒāļ™āļŦāļąāļ§āļ‚āđ‰āļ­āļ āļēāļĒāđƒāļ™āļŠāļ·āđˆāļ­ __consumer_offsets āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡āļāļēāļĢ commit offset āđ€āļ—āļĩāļĒāļšāļāļąāļšāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļāļģāļŦāļ™āļ”āļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļāļēāļĢāļŠāđˆāļ‡āļĄāļ­āļš

python
# consumer_pipeline.py — Consumer group with manual offset management
from confluent_kafka import Consumer, KafkaError
import json

def create_consumer(group_id: str):
    return Consumer({
        'bootstrap.servers': 'kafka-1:9092',
        'group.id': group_id,
        'auto.offset.reset': 'earliest',
        'enable.auto.commit': False,  # Manual commit for at-least-once
        'max.poll.interval.ms': 300000,
        'session.timeout.ms': 45000,
        'isolation.level': 'read_committed'  # Only read committed transactions
    })

def process_batch(consumer: Consumer, batch_size: int = 500):
    """Process records in micro-batches for throughput."""
    consumer.subscribe(['order-events'])
    buffer = []

    while True:
        msg = consumer.poll(timeout=1.0)
        if msg is None:
            continue
        if msg.error():
            if msg.error().code() == KafkaError._PARTITION_EOF:
                continue
            raise Exception(msg.error())

        record = json.loads(msg.value().decode('utf-8'))
        buffer.append(record)

        if len(buffer) >= batch_size:
            # Process the full batch (write to warehouse, etc.)
            write_to_warehouse(buffer)
            # Commit AFTER successful processing
            consumer.commit(asynchronous=False)
            buffer.clear()

def write_to_warehouse(records: list):
    # Insert batch into data warehouse (BigQuery, Snowflake, etc.)
    pass

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē enable.auto.commit āđ€āļ›āđ‡āļ™ False āđāļĨāļ° commit āļŦāļĨāļąāļ‡āļˆāļēāļ write_to_warehouse āļŠāļģāđ€āļĢāđ‡āļˆāđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™āļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļāļēāļĢāļŠāđˆāļ‡āļĄāļ­āļšāđāļšāļš at-least-once āļŦāļēāļ consumer āļ‚āļąāļ”āļ‚āđ‰āļ­āļ‡āļŦāļĨāļąāļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļ•āđˆāļāđˆāļ­āļ™ commit record āļˆāļ°āļ–āļđāļāļŠāđˆāļ‡āļ‹āđ‰āļģāđ€āļĄāļ·āđˆāļ­āđ€āļĢāļīāđˆāļĄāđƒāļŦāļĄāđˆ āļŠāļģāļŦāļĢāļąāļš data pipeline āļ—āļĩāđˆāļ›āđ‰āļ­āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ‚āđ‰āļēāļŠāļđāđˆ warehouse āļ™āļĩāđˆāđ€āļ›āđ‡āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ—āļĩāđˆāļ–āļđāļāļ•āđ‰āļ­āļ‡āđ‚āļ”āļĒāļ—āļąāđˆāļ§āđ„āļ› āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđāļšāļš idempotent āđ€āļ‚āđ‰āļēāļŠāļđāđˆ warehouse āļˆāļąāļ”āļāļēāļĢāļĢāļēāļĒāļāļēāļĢāļ—āļĩāđˆāļ‹āđ‰āļģāļāļąāļ™āđ„āļ”āđ‰

Kafka Connect āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­ Data Pipeline

Kafka Connect āļˆāļąāļ”āđ€āļ•āļĢāļĩāļĒāļĄ framework āļ—āļĩāđˆāļ‚āļĒāļēāļĒāļ‚āļ™āļēāļ”āđ„āļ”āđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ„āļĨāļ·āđˆāļ­āļ™āļĒāđ‰āļēāļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Kafka āļāļąāļšāļĢāļ°āļšāļšāļ āļēāļĒāļ™āļ­āļāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ” producer/consumer āđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡ source connector āļ™āļģāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ‚āđ‰āļēāļŠāļđāđˆ Kafka āļŠāđˆāļ§āļ™ sink connector āļœāļĨāļąāļāļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļ­āļāđ„āļ›āļ‚āđ‰āļēāļ‡āļ™āļ­āļ

json
{
  "name": "postgres-cdc-source",
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "database.hostname": "postgres-primary",
    "database.port": "5432",
    "database.user": "replication_user",
    "database.dbname": "production",
    "topic.prefix": "cdc",
    "table.include.list": "public.orders,public.customers,public.products",
    "slot.name": "debezium_slot",
    "plugin.name": "pgoutput",
    "publication.name": "dbz_publication",
    "snapshot.mode": "initial",
    "transforms": "route",
    "transforms.route.type": "org.apache.kafka.connect.transforms.RegexRouter",
    "transforms.route.regex": "cdc\\.public\\.(.*)",
    "transforms.route.replacement": "warehouse.$1"
  }
}

Debezium CDC connector āļ™āļĩāđ‰āļˆāļąāļšāļ—āļļāļāļāļēāļĢ INSERT, UPDATE āđāļĨāļ° DELETE āļˆāļēāļāļ•āļēāļĢāļēāļ‡ PostgreSQL āđāļĨāļ°āđ€āļœāļĒāđāļžāļĢāđˆāđ€āļ›āđ‡āļ™āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ Kafka āļāļēāļĢāđāļ›āļĨāļ‡ RegexRouter āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­āļŦāļąāļ§āļ‚āđ‰āļ­āļˆāļēāļ cdc.public.orders āđ€āļ›āđ‡āļ™ warehouse.orders āļĢāļąāļāļĐāļē namespace āļ‚āļ­āļ‡ pipeline āđƒāļŦāđ‰āļŠāļ°āļ­āļēāļ” āđ€āļĄāļ·āđˆāļ­āļĢāļ§āļĄāļāļąāļš BigQuery āļŦāļĢāļ·āļ­ Snowflake sink connector āļˆāļ°āļŠāļĢāđ‰āļēāļ‡ CDC pipeline āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāđ€āļ•āđ‡āļĄāļĢāļđāļ›āđāļšāļšāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āđ‚āļ„āđ‰āļ”āđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡

āļžāļĢāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļ°āļžāļīāļŠāļīāļ•āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Data Engineering āđāļĨāđ‰āļ§āļŦāļĢāļ·āļ­āļĒāļąāļ‡āļ„āļĢāļąāļš?

āļāļķāļāļāļ™āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āđāļšāļšāđ‚āļ•āđ‰āļ•āļ­āļš, flashcards āđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđāļšāļš Exactly-Once āđƒāļ™ Kafka Pipeline

Kafka āļĢāļ­āļ‡āļĢāļąāļšāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđāļšāļš exactly-once (EOS) āļœāđˆāļēāļ™ idempotent producer āđāļĨāļ° transactional API āļŠāļģāļŦāļĢāļąāļš data engineering pipeline EOS āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāļĄāļĩ record āļ‹āđ‰āļģāđƒāļ™āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡āđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ logic āļāļēāļĢ deduplicate

āļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļšāļŠāļēāļĄāļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ—āļģāđƒāļŦāđ‰ EOS āļ—āļģāļ‡āļēāļ™āđ„āļ”āđ‰:

  1. Idempotent producer: producer āđāļ•āđˆāļĨāļ°āļ•āļąāļ§āđ„āļ”āđ‰āļĢāļąāļš Producer ID āļ—āļĩāđˆāđ„āļĄāđˆāļ‹āđ‰āļģāļāļąāļ™ broker āļˆāļ°āļāļģāļˆāļąāļ”āļāļēāļĢāļĨāļ­āļ‡āļ‹āđ‰āļģāļ—āļĩāđˆāļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™āđ‚āļ”āļĒāđƒāļŠāđ‰ sequence number āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļāļēāļĢāļĨāļ­āļ‡āļŠāđˆāļ‡āļ‹āđ‰āļģāļœāđˆāļēāļ™āđ€āļ„āļĢāļ·āļ­āļ‚āđˆāļēāļĒāļˆāļķāļ‡āđ„āļĄāđˆāļŠāļĢāđ‰āļēāļ‡āļĢāļēāļĒāļāļēāļĢāļ—āļĩāđˆāļ‹āđ‰āļģāļāļąāļ™
  2. Transaction: producer āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āļĩāļĒāļ™āđ€āļ‚āđ‰āļēāļŦāļĨāļēāļĒ partition āđāļĨāļ° commit offset āđƒāļ™āļ˜āļļāļĢāļāļĢāļĢāļĄāđ€āļ”āļĩāļĒāļ§āđāļšāļš atomic āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļŠāļģāđ€āļĢāđ‡āļˆāļŦāļĢāļ·āļ­āđ„āļĄāđˆāļĄāļĩāļ­āļ°āđ„āļĢāļŠāļģāđ€āļĢāđ‡āļˆāđ€āļĨāļĒ
  3. āļāļēāļĢāđāļĒāļāđāļšāļš read_committed: consumer āļ—āļĩāđˆāļ•āļąāđ‰āļ‡āļ„āđˆāļē isolation.level=read_committed āļˆāļ°āđ€āļŦāđ‡āļ™āđ€āļ‰āļžāļēāļ° record āļˆāļēāļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ—āļĩāđˆ commit āđāļĨāđ‰āļ§āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
python
# exactly_once_pipeline.py — Transactional consume-transform-produce
from confluent_kafka import Consumer, Producer
import json

def transactional_pipeline():
    consumer = Consumer({
        'bootstrap.servers': 'kafka-1:9092',
        'group.id': 'etl-transformer',
        'enable.auto.commit': False,
        'isolation.level': 'read_committed'
    })

    producer = Producer({
        'bootstrap.servers': 'kafka-1:9092',
        'transactional.id': 'etl-transformer-001',
        'acks': 'all',
        'enable.idempotence': True
    })

    producer.init_transactions()
    consumer.subscribe(['raw-events'])

    while True:
        msg = consumer.poll(1.0)
        if msg is None or msg.error():
            continue

        # Begin atomic transaction
        producer.begin_transaction()
        try:
            raw = json.loads(msg.value())
            enriched = transform(raw)

            # Write transformed record to output topic
            producer.produce(
                'enriched-events',
                key=msg.key(),
                value=json.dumps(enriched).encode('utf-8')
            )

            # Commit consumer offset within the same transaction
            producer.send_offsets_to_transaction(
                consumer.position(consumer.assignment()),
                consumer.consumer_group_metadata()
            )
            producer.commit_transaction()
        except Exception:
            producer.abort_transaction()

def transform(record: dict) -> dict:
    # Apply business logic transformations
    record['processed_at'] = '2026-04-20T00:00:00Z'
    record['pipeline_version'] = '2.1'
    return record

āļ„āđˆāļē transactional.id āļŠāđˆāļ§āļĒāđƒāļŦāđ‰ broker āļŠāļēāļĄāļēāļĢāļ– fence zombie producer āđ„āļ”āđ‰ āļŦāļēāļ consumer āļ‚āļąāļ”āļ‚āđ‰āļ­āļ‡āđāļĨāļ° instance āđƒāļŦāļĄāđˆāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ”āđ‰āļ§āļĒ transactional.id āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ broker āļˆāļ°āļĒāļāđ€āļĨāļīāļāļ˜āļļāļĢāļāļĢāļĢāļĄāļ—āļĩāđˆāļ„āđ‰āļēāļ‡āļ­āļĒāļđāđˆāļˆāļēāļ instance āđ€āļāđˆāļē āļ›āđ‰āļ­āļ‡āļāļąāļ™ output āļ—āļĩāđˆāļ‹āđ‰āļģāļāļąāļ™

Share Groups: āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ‚āļ­āļ‡āļ„āļīāļ§āđƒāļ™ Kafka 4.2

Kafka 4.2 āđāļ™āļ°āļ™āļģ Share Groups āļ—āļĩāđˆāļžāļĢāđ‰āļ­āļĄāđƒāļŠāđ‰āļ‡āļēāļ™āļĢāļ°āļ”āļąāļš production āļ™āļģāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ‚āļ­āļ‡āļ„āļīāļ§āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđāļšāļšāļ”āļąāđ‰āļ‡āđ€āļ”āļīāļĄāļĄāļēāļŠāļđāđˆ Kafka āļ•āđˆāļēāļ‡āļˆāļēāļ consumer group āļ—āļĩāđˆāđāļ•āđˆāļĨāļ° partition āļ–āļđāļāļˆāļąāļ”āļŠāļĢāļĢāđƒāļŦāđ‰āļāļąāļš consumer āļŦāļ™āļķāđˆāļ‡āļ•āļąāļ§āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ Share Groups āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰ consumer āļŦāļĨāļēāļĒāļ•āļąāļ§āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ record āļˆāļēāļ partition āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļīāļŠāļĢāļ°

| āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļī | Consumer Groups | Share Groups | |---|---|---| | āļāļēāļĢāļˆāļąāļ”āļŠāļĢāļĢ partition | āđ€āļ‰āļžāļēāļ°āļ•āļąāļ§ (consumer āļŦāļ™āļķāđˆāļ‡āļ•āļąāļ§āļ•āđˆāļ­ partition) | āđāļŠāļĢāđŒ (consumer āļŦāļĨāļēāļĒāļ•āļąāļ§āļ•āđˆāļ­ partition) | | āļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļš | āļ„āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ•āđˆāļ­ partition | āđ„āļĄāđˆāļĄāļĩāļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļš | | āļāļĢāļ“āļĩāđƒāļŠāđ‰āļ‡āļēāļ™ | āļŠāļ•āļĢāļĩāļĄāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ—āļĩāđˆāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļš | āļāļēāļĢāļāļĢāļ°āļˆāļēāļĒāļ‡āļēāļ™ āļ„āļīāļ§āļ‡āļēāļ™ | | āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļĢāļąāļš | āļ­āļīāļ‡āļ•āļēāļĄ offset (commit position) | āļ•āđˆāļ­ record (acknowledge āđāļĒāļāļāļąāļ™) | | Parallelism āļŠāļđāļ‡āļŠāļļāļ” | āļˆāļģāļāļąāļ”āļ”āđ‰āļ§āļĒāļˆāļģāļ™āļ§āļ™ partition | āļˆāļģāļāļąāļ”āļ”āđ‰āļ§āļĒāļˆāļģāļ™āļ§āļ™ consumer |

Share Groups āđāļāđ‰āļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āļ—āļĩāđˆāļĄāļĩāļĄāļēāļ™āļēāļ™: āļāļēāļĢāļ‚āļĒāļēāļĒāļˆāļģāļ™āļ§āļ™ consumer āđƒāļŦāđ‰āđ€āļāļīāļ™āļˆāļģāļ™āļ§āļ™ partition āļŠāļģāļŦāļĢāļąāļš workload āđ€āļŠāđˆāļ™ āļāļēāļĢāļŠāđˆāļ‡āļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļŦāļĢāļ·āļ­āļāļēāļĢāļāļĢāļ°āļˆāļēāļĒāļ‡āļēāļ™ batch āļ—āļĩāđˆāļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāđ„āļĄāđˆāļŠāļģāļ„āļąāļ Share Groups āļ—āļģāđƒāļŦāđ‰āđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļĄāļĩāļĢāļ°āļšāļšāļ„āļīāļ§āļ āļēāļĒāļ™āļ­āļāļ„āļ§āļšāļ„āļđāđˆāđ„āļ›āļāļąāļš Kafka

āđ€āļĄāļ·āđˆāļ­āđƒāļ”āļ„āļ§āļĢāđƒāļŠāđ‰ Share Groups

Share Groups āđ€āļŦāļĄāļēāļ°āļāļąāļš workload āļāļēāļĢāļāļĢāļ°āļˆāļēāļĒāļ‡āļēāļ™ āđ€āļŠāđˆāļ™ āļāļēāļĢāļŠāđˆāļ‡āļ­āļĩāđ€āļĄāļĨ āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļāļēāļĢāļ­āļąāļ›āđ‚āļŦāļĨāļ” āļāļēāļĢāļĢāļąāļ™ ML inference āļŠāļģāļŦāļĢāļąāļš event sourcing, CDC āļŦāļĢāļ·āļ­ pipeline āđƒāļ”āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļšāļšāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļš consumer group āļĒāļąāļ‡āļ„āļ‡āđ€āļ›āđ‡āļ™āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāļ—āļĩāđˆāļ–āļđāļāļ•āđ‰āļ­āļ‡

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Kafka āļŠāļģāļŦāļĢāļąāļšāļ§āļīāļĻāļ§āļāļĢāļ‚āđ‰āļ­āļĄāļđāļĨ

āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„āļŠāļģāļŦāļĢāļąāļšāļ•āļģāđāļŦāļ™āđˆāļ‡ data engineering āļĄāļąāļāļ—āļ”āļŠāļ­āļšāļ„āļ§āļēāļĄāļĢāļđāđ‰ Kafka āļ„āļģāļ–āļēāļĄāļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāđāļ™āļ§āļ„āļīāļ”āļ—āļĩāđˆāļ–āļđāļāļ›āļĢāļ°āđ€āļĄāļīāļ™āļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ”

Q: Kafka āļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ­āļĒāđˆāļēāļ‡āđ„āļĢ? āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ–āļđāļāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āđ€āļ‰āļžāļēāļ°āļ āļēāļĒāđƒāļ™ partition āđ€āļ”āļĩāļĒāļ§āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ record āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļĄāļĩ partition key āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļˆāļ°āđ„āļ›āļĒāļąāļ‡ partition āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđāļĨāļ°āļ–āļđāļāđ€āļžāļīāđˆāļĄāļ•āđˆāļ­āļ—āđ‰āļēāļĒāļ•āļēāļĄāļĨāļģāļ”āļąāļš āļĢāļ°āļŦāļ§āđˆāļēāļ‡ partition āđ„āļĄāđˆāļĄāļĩāļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāđƒāļ”āļ­āļĒāļđāđˆ āļāļēāļĢāđ€āļĨāļ·āļ­āļ partition key āļ—āļĩāđˆāļ–āļđāļāļ•āđ‰āļ­āļ‡āđ€āļ›āđ‡āļ™āļāļĨāđ„āļāļŦāļĨāļąāļāđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāđƒāļ™ Kafka pipeline

Q: āđ€āļāļīāļ”āļ­āļ°āđ„āļĢāļ‚āļķāđ‰āļ™āđ€āļĄāļ·āđˆāļ­ consumer āđƒāļ™āļāļĨāļļāđˆāļĄāļĨāđ‰āļĄāđ€āļŦāļĨāļ§? Group coordinator āļ•āļĢāļ§āļˆāļžāļšāļ„āļ§āļēāļĄāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āļœāđˆāļēāļ™ heartbeat āļ—āļĩāđˆāļŦāļēāļĒāđ„āļ› (āļ„āļ§āļšāļ„āļļāļĄāđ‚āļ”āļĒ session.timeout.ms) āļˆāļ°āļāļĢāļ°āļ•āļļāđ‰āļ™ rebalance āļˆāļąāļ”āļŠāļĢāļĢ partition āļ‚āļ­āļ‡ consumer āļ—āļĩāđˆāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āđƒāļŦāļĄāđˆāđƒāļŦāđ‰āļāļąāļšāļŠāļĄāļēāļŠāļīāļāļ—āļĩāđˆāđ€āļŦāļĨāļ·āļ­āđƒāļ™āļāļĨāļļāđˆāļĄ āđƒāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡ rebalance āļāļēāļĢāļšāļĢāļīāđ‚āļ āļ„āļˆāļ°āļŦāļĒāļļāļ”āļŠāļąāđˆāļ§āļ„āļĢāļēāļ§ Cooperative sticky rebalancing (āļ„āđˆāļēāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđƒāļ™ Kafka 4.x) āļĨāļ”āļāļēāļĢāļŦāļĒāļļāļ”āļŠāļ°āļ‡āļąāļāđ‚āļ”āļĒāļˆāļąāļ”āļŠāļĢāļĢāđƒāļŦāļĄāđˆāđ€āļ‰āļžāļēāļ° partition āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļœāļĨāļāļĢāļ°āļ—āļš

Q: āļ­āļ˜āļīāļšāļēāļĒāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ acks=1 āđāļĨāļ° acks=all āļ”āđ‰āļ§āļĒ acks=1 broker āļĒāļ·āļ™āļĒāļąāļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļŦāļĨāļąāļ‡āļˆāļēāļ leader replica āđ€āļāđ‡āļš record āđ„āļ§āđ‰ āļ”āđ‰āļ§āļĒ acks=all broker āļˆāļ°āļĢāļ­āļˆāļ™āļāļ§āđˆāļē in-sync replica (ISR) āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļˆāļ°āļĒāļ·āļ™āļĒāļąāļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™ acks=all āļĢāļ§āļĄāļāļąāļš min.insync.replicas=2 āļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļ§āđˆāļēāļˆāļ°āđ„āļĄāđˆāļŠāļđāļāļŦāļēāļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļēāļ broker āđ€āļ”āļĩāđˆāļĒāļ§āļĨāđ‰āļĄāđ€āļŦāļĨāļ§ āđāļĨāļāļāļąāļš latency āļ—āļĩāđˆāļŠāļđāļ‡āļ‚āļķāđ‰āļ™āđ€āļĨāđ‡āļāļ™āđ‰āļ­āļĒ

Q: āļ„āļļāļ“āļˆāļ°āļ­āļ­āļāđāļšāļš CDC pipeline āđ‚āļ”āļĒāđƒāļŠāđ‰ Kafka āļ­āļĒāđˆāļēāļ‡āđ„āļĢ? āļˆāļąāļšāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļˆāļēāļ source database āđ‚āļ”āļĒāđƒāļŠāđ‰ Debezium (āļŠāļģāļŦāļĢāļąāļš PostgreSQL, MySQL) āļŦāļĢāļ·āļ­ CDC connector āđāļšāļš native āđ€āļœāļĒāđāļžāļĢāđˆāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĒāļąāļ‡ topic Kafka āļ—āļĩāđˆ partition āļ•āļēāļĄ primary key āđƒāļŠāđ‰ sink connector (BigQuery Sink, S3 Sink) āđ€āļžāļ·āđˆāļ­āđ‚āļŦāļĨāļ”āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ€āļ‚āđ‰āļēāļŠāļđāđˆ analytical warehouse āļ•āļąāđ‰āļ‡āļ„āđˆāļē isolation.level=read_committed āļšāļ™ consumer āđ€āļžāļ·āđˆāļ­āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļāļēāļĢāļ­āđˆāļēāļ™āļ˜āļļāļĢāļāļĢāļĢāļĄ database āļ—āļĩāđˆāļĒāļąāļ‡āđ„āļĄāđˆ commit āđƒāļŠāđ‰ schema registry āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļāļēāļĢ schema Avro āļŦāļĢāļ·āļ­ Protobuf āļŠāļģāļŦāļĢāļąāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡

Q: ISR āļ„āļ·āļ­āļ­āļ°āđ„āļĢāđāļĨāļ°āļ—āļģāđ„āļĄāļˆāļķāļ‡āļŠāļģāļ„āļąāļ? ISR (In-Sync Replicas) āļ„āļ·āļ­āļŠāļļāļ”āļ‚āļ­āļ‡ replica āļ—āļĩāđˆāļ•āļēāļĄāļ—āļąāļ™ partition leader āļ­āļĒāđˆāļēāļ‡āđ€āļ•āđ‡āļĄāļ—āļĩāđˆ āļĄāļĩāđ€āļžāļĩāļĒāļ‡āļŠāļĄāļēāļŠāļīāļ ISR āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāđ„āļ”āđ‰āļĢāļąāļšāđ€āļĨāļ·āļ­āļāđ€āļ›āđ‡āļ™ leader āļ„āđˆāļē min.insync.replicas āļāļģāļŦāļ™āļ”āļ§āđˆāļēāļĄāļĩ replica āļāļĩāđˆāļ•āļąāļ§āļ•āđ‰āļ­āļ‡āļĒāļ·āļ™āļĒāļąāļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļāđˆāļ­āļ™āļ—āļĩāđˆāļˆāļ°āļ–āļ·āļ­āļ§āđˆāļē commit āđāļĨāđ‰āļ§ āļŦāļēāļ ISR āļĨāļ”āļĨāļ‡āļ•āđˆāļģāļāļ§āđˆāļē min.insync.replicas broker āļˆāļ°āļ›āļāļīāđ€āļŠāļ˜āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđāļ—āļ™āļ—āļĩāđˆāļˆāļ°āđ€āļŠāļĩāđˆāļĒāļ‡āļ•āđˆāļ­āļāļēāļĢāļŠāļđāļāļŦāļēāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ

āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ data engineering āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ āļŠāļļāļ” āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ data engineering āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŦāļąāļ§āļ‚āđ‰āļ­āļ—āļĩāđˆāļāļ§āđ‰āļēāļ‡āļ‚āļķāđ‰āļ™āļĢāļ§āļĄāļ–āļķāļ‡ āļĢāļđāļ›āđāļšāļš pipeline ETL/ELT āđāļĨāļ° āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļšāļšāļˆāļģāļĨāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ

āđ€āļĢāļīāđˆāļĄāļāļķāļāļ‹āđ‰āļ­āļĄāđ€āļĨāļĒ!

āļ—āļ”āļŠāļ­āļšāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āļšāļ—āļŠāļĢāļļāļ›

  • Kafka 4.x āļāļąāļš KRaft āļāļģāļˆāļąāļ” ZooKeeper āļ­āļĒāđˆāļēāļ‡āļŠāļĄāļšāļđāļĢāļ“āđŒ āļĨāļ”āļ āļēāļĢāļ°āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļ‡āļēāļ™āļŠāļģāļŦāļĢāļąāļšāļ—āļĩāļĄ data engineering
  • āļāļēāļĢāđ€āļĨāļ·āļ­āļ partition key āļāļģāļŦāļ™āļ”āļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļš āļ„āļ§āļĢāđ€āļĨāļ·āļ­āļ key āļ•āļēāļĄāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđ„āļĄāđˆāđƒāļŠāđˆāļ•āļēāļĄāļ„āļ§āļēāļĄāļŠāļ°āļ”āļ§āļ
  • āļāļēāļĢ commit offset āļ”āđ‰āļ§āļĒāļ•āļ™āđ€āļ­āļ‡āļ”āđ‰āļ§āļĒ enable.auto.commit=False āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļŠāđˆāļ‡āļĄāļ­āļšāđāļšāļš at-least-once transactional API āđƒāļŦāđ‰āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđāļšāļš exactly-once āļŠāļģāļŦāļĢāļąāļš pipeline āđāļšāļš consume-transform-produce
  • Kafka Connect āļāļąāļš Debezium āđƒāļŦāđ‰ CDC āļ—āļĩāđˆāļžāļĢāđ‰āļ­āļĄāđƒāļŠāđ‰āļ‡āļēāļ™āļĢāļ°āļ”āļąāļš production āđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ” consumer āđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡
  • Share Groups (Kafka 4.2) āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ‚āļ­āļ‡āļ„āļīāļ§āļŠāļģāļŦāļĢāļąāļš workload āļāļēāļĢāļāļĢāļ°āļˆāļēāļĒāļ‡āļēāļ™āļ—āļĩāđˆāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļēāļĢāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļš
  • āļāļēāļĢāļ‚āļĒāļēāļĒāļ‚āļ™āļēāļ” consumer group āļ–āļđāļāļˆāļģāļāļąāļ”āļ”āđ‰āļ§āļĒāļˆāļģāļ™āļ§āļ™ partition āļ„āļ§āļĢāļ§āļēāļ‡āđāļœāļ™āļˆāļģāļ™āļ§āļ™ partition āļ•āļēāļĄāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ parallelism āļ‚āļ­āļ‡ consumer āļ—āļĩāđˆāļˆāļļāļ”āļŠāļđāļ‡āļŠāļļāļ”

āđ€āļĢāļīāđˆāļĄāļāļķāļāļ‹āđ‰āļ­āļĄāđ€āļĨāļĒ!

āļ—āļ”āļŠāļ­āļšāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āđāļ—āđ‡āļ

#kafka
#streaming
#data-engineering
#partitions
#consumer-groups
#kraft
#event-driven

āđāļŠāļĢāđŒ

āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡

ETL vs ELT data pipeline architecture comparison diagram

ETL vs ELT āđƒāļ™āļ›āļĩ 2026: āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ Data Pipeline āļ—āļĩāđˆ Data Engineer āļ•āđ‰āļ­āļ‡āļĢāļđāđ‰

āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļš ETL āđāļĨāļ° ELT āļ­āļĒāđˆāļēāļ‡āļĨāļ°āđ€āļ­āļĩāļĒāļ” āļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ” dbt āđāļĨāļ° Python āđ€āļžāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ data pipeline āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļāļąāļšāļ—āļĩāļĄāļ‚āļ­āļ‡āļ„āļļāļ“āđƒāļ™āļ›āļĩ 2026

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ data engineering āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ pipeline, SQL āđāļĨāļ° system design āđƒāļ™āļ›āļĩ 2026

25 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Data Engineering āļĒāļ­āļ”āļ™āļīāļĒāļĄāđƒāļ™āļ›āļĩ 2026

25 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ data engineering āļ—āļĩāđˆāļ–āļđāļāļ–āļēāļĄāļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļ›āļĩ 2026 āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ SQL, data pipeline, ETL/ELT, Spark, Kafka, data modeling āđāļĨāļ° system design āļžāļĢāđ‰āļ­āļĄāļ„āļģāļ•āļ­āļšāđ‚āļ”āļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”

āļ āļēāļžāļ›āļĢāļ°āļāļ­āļšāļšāļ—āđ€āļĢāļĩāļĒāļ™ data pipeline Apache Spark āļāļąāļš Python āđāļŠāļ”āļ‡āļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ

Apache Spark āļāļąāļš Python: āļŠāļĢāđ‰āļēāļ‡ Data Pipeline āļ—āļĩāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™

āļšāļ—āđ€āļĢāļĩāļĒāļ™ PySpark āļ āļēāļ„āļ›āļāļīāļšāļąāļ•āļīāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļāļąāļš DataFrame āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ ETL pipeline āđāļĨāļ°āļŸāļĩāđ€āļˆāļ­āļĢāđŒāļ‚āļ­āļ‡ Spark 4.0 āļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āļžāļĢāđ‰āļ­āļĄāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡āļŠāļģāļŦāļĢāļąāļš data engineer āļ—āļĩāđˆāļāļģāļĨāļąāļ‡āđ€āļ•āļĢāļĩāļĒāļĄāļŠāļ­āļšāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđ€āļŠāļīāļ‡āđ€āļ—āļ„āļ™āļīāļ„