Apache Kafka āļŠāļģāļŦāļĢāļąāļāļ§āļīāļĻāļ§āļāļĢāļāđāļāļĄāļđāļĨ: Streaming, Partitions āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ
āđāļāļēāļ°āļĨāļķāļ Apache Kafka āļŠāļģāļŦāļĢāļąāļāļ§āļīāļĻāļ§āļāļĢāļāđāļāļĄāļđāļĨ āļāļĢāļāļāļāļĨāļļāļĄāļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄ streaming āļāļĨāļĒāļļāļāļāđ partition consumer groups āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļĩāđāļāļāļāđāļāļĒ āļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļāļāđāļ§āļĒ Kafka 4.x āđāļĨāļ° KRaft

Apache Kafka āđāļāđāļāļŦāļąāļ§āđāļāļāļāļ stack āļāđāļēāļ data engineering āļŠāļĄāļąāļĒāđāļŦāļĄāđāđāļāļ·āļāļāļāļļāļāđāļŦāđāļ āļĢāļāļāļĢāļąāļāđāļŦāļāļļāļāļēāļĢāļāđāļŦāļĨāļēāļĒāļĨāđāļēāļāļĨāđāļēāļāļāļĢāļąāđāļāļāđāļāļ§āļąāļāđāļāļāļāļāđāļāļĢāļāļļāļāļāļāļēāļ āļāđāļ§āļĒ Kafka 4.x āļāļĩāđāļāļģāļāļēāļāļāļ KRaft āļāļĒāđāļēāļāđāļāđāļĄāļĢāļđāļāđāļāļ (āđāļĄāđāļāđāļāļāļāļķāđāļ ZooKeeper āļāļĩāļāļāđāļāđāļ) āđāļāļĨāļāļāļāļĢāđāļĄāļāļĩāđāļāļķāļāļāļđāđāļĨāļĢāļąāļāļĐāļēāļāđāļēāļĒāļāļķāđāļāđāļāļāļāļ°āļāļĩāđāļĒāļąāļāļāļāļāļēāļĢāļĢāļąāļāļāļĢāļ°āļāļąāļāđāļāļāđāļāļīāļĄāļāļĩāđāļāļģāđāļŦāđ Kafka āļāļĨāļēāļĒāđāļāđāļāļĄāļēāļāļĢāļāļēāļāļāļļāļāļŠāļēāļŦāļāļĢāļĢāļĄāļŠāļģāļŦāļĢāļąāļ data pipeline āđāļāļāđāļĢāļĩāļĒāļĨāđāļāļĄāđ
āļāļąāđāļāđāļāđ 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
# 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 āļāļąāđāļāđāļ§āđ
# 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 āđāļāļ·āđāļāļŠāļĢāđāļēāļāđāļŠāđāļāļāļēāļāļāļđāđāđāļāđāļāļķāđāļāļĄāļēāđāļŦāļĄāđāđāļāđāļāļĒāđāļēāļāļāļđāļāļāđāļāļ
āļŦāļēāļ 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 āđāļāļĩāļĒāļāļāļąāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļģāļŦāļāļāļāļēāļĢāļĢāļąāļāļāļĢāļ°āļāļąāļāļāļēāļĢāļŠāđāļāļĄāļāļ
# 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 āļāļĨāļąāļāļāđāļāļĄāļđāļĨāļāļāļāđāļāļāđāļēāļāļāļāļ
{
"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 āļāļģāļāļēāļāđāļāđ:
- Idempotent producer: producer āđāļāđāļĨāļ°āļāļąāļ§āđāļāđāļĢāļąāļ Producer ID āļāļĩāđāđāļĄāđāļāđāļģāļāļąāļ broker āļāļ°āļāļģāļāļąāļāļāļēāļĢāļĨāļāļāļāđāļģāļāļĩāđāļāđāļģāļāđāļāļāđāļāļĒāđāļāđ sequence number āļāļąāļāļāļąāđāļāļāļēāļĢāļĨāļāļāļŠāđāļāļāđāļģāļāđāļēāļāđāļāļĢāļ·āļāļāđāļēāļĒāļāļķāļāđāļĄāđāļŠāļĢāđāļēāļāļĢāļēāļĒāļāļēāļĢāļāļĩāđāļāđāļģāļāļąāļ
- Transaction: producer āļŠāļēāļĄāļēāļĢāļāđāļāļĩāļĒāļāđāļāđāļēāļŦāļĨāļēāļĒ partition āđāļĨāļ° commit offset āđāļāļāļļāļĢāļāļĢāļĢāļĄāđāļāļĩāļĒāļ§āđāļāļ atomic āļāļēāļĢāđāļāļĩāļĒāļāļāļļāļāļāļĢāļąāđāļāļŠāļģāđāļĢāđāļāļŦāļĢāļ·āļāđāļĄāđāļĄāļĩāļāļ°āđāļĢāļŠāļģāđāļĢāđāļāđāļĨāļĒ
- āļāļēāļĢāđāļĒāļāđāļāļ
read_committed: consumer āļāļĩāđāļāļąāđāļāļāđāļēisolation.level=read_committedāļāļ°āđāļŦāđāļāđāļāļāļēāļ° record āļāļēāļāļāļļāļĢāļāļĢāļĢāļĄāļāļĩāđ commit āđāļĨāđāļ§āđāļāđāļēāļāļąāđāļ
# 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 āđāļŦāļĄāļēāļ°āļāļąāļ 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 āļāļĩāđāļāļļāļāļŠāļđāļāļŠāļļāļ
āđāļĢāļīāđāļĄāļāļķāļāļāđāļāļĄāđāļĨāļĒ!
āļāļāļŠāļāļāļāļ§āļēāļĄāļĢāļđāđāļāļāļāļāļļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāļŠāļąāļĄāļ āļēāļĐāļāđāđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āđāļāđāļ
āđāļāļĢāđ
āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ

ETL vs ELT āđāļāļāļĩ 2026: āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄ Data Pipeline āļāļĩāđ Data Engineer āļāđāļāļāļĢāļđāđ
āđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļ ETL āđāļĨāļ° ELT āļāļĒāđāļēāļāļĨāļ°āđāļāļĩāļĒāļ āļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ dbt āđāļĨāļ° Python āđāļāļ·āđāļāđāļĨāļ·āļāļāļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄ data pipeline āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāļąāļāļāļĩāļĄāļāļāļāļāļļāļāđāļāļāļĩ 2026

25 āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ Data Engineering āļĒāļāļāļāļīāļĒāļĄāđāļāļāļĩ 2026
25 āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ data engineering āļāļĩāđāļāļđāļāļāļēāļĄāļāđāļāļĒāļāļĩāđāļŠāļļāļāđāļāļāļĩ 2026 āļāļĢāļāļāļāļĨāļļāļĄ SQL, data pipeline, ETL/ELT, Spark, Kafka, data modeling āđāļĨāļ° system design āļāļĢāđāļāļĄāļāļģāļāļāļāđāļāļĒāļĨāļ°āđāļāļĩāļĒāļ

Apache Spark āļāļąāļ Python: āļŠāļĢāđāļēāļ Data Pipeline āļāļĩāļĨāļ°āļāļąāđāļāļāļāļ
āļāļāđāļĢāļĩāļĒāļ PySpark āļ āļēāļāļāļāļīāļāļąāļāļīāļāļĢāļāļāļāļĨāļļāļĄāļāļēāļĢāļāļģāļāļēāļāļāļąāļ DataFrame āļāļēāļĢāļŠāļĢāđāļēāļ ETL pipeline āđāļĨāļ°āļāļĩāđāļāļāļĢāđāļāļāļ Spark 4.0 āļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļĢāđāļāļĄāđāļāđāļāļēāļāļāļĢāļīāļāļŠāļģāļŦāļĢāļąāļ data engineer āļāļĩāđāļāļģāļĨāļąāļāđāļāļĢāļĩāļĒāļĄāļŠāļāļāļŠāļąāļĄāļ āļēāļĐāļāđāđāļāļīāļāđāļāļāļāļīāļ