Change Data Capture (CDC)
এই পাঠে যা শিখবেন
- CDC কী, কেন nightly batch dump-এর চেয়ে শ্রেষ্ঠ
- তিন পদ্ধতির trade-off — log-based, trigger-based, query-based
- Debezium + Kafka Connect setup ও event format
- Bangladesh-এর bank ও ecommerce-এ CDC-র বাস্তব use case
১ · CDC কেন দরকার?
একটি ব্যাংকের core banking system MySQL-এ। Risk team চায় — প্রতি transaction-এর immediate copy data lake-এ যাক, fraud model real-time scoring করুক। সরল উপায় — প্রতি ৫ মিনিটে SELECT * FROM transactions WHERE created_at > ?। কিন্তু এতে DB load বাড়ে, latency ৫ মিনিট, এবং DELETE/UPDATE মিস হয়।
CDCChange Data CaptureDatabase-এর change events-কে capture করে downstream system-এ pump করার technique. Source DB-র transaction log (binlog/WAL) থেকে read করায় source-এ minimum overhead. এই সমস্যার elegant সমাধান। DB-র নিজস্ব transaction log (MySQL-এর binlog, Postgres-এর WAL) পড়ে — প্রতিটি change event Kafka-তে publish. Source DB-তে query overhead নেই, latency সেকেন্ড-সাব-সেকেন্ড, এবং সব operation (insert/update/delete) capture.
Database একটি state store. কিন্তু সেই state পৌঁছানোর জন্য একটি event log-ও আছে — transaction log. CDC সেই log-কে first-class API হিসেবে expose করে। ফলে DB একসাথে state store + event source হয়ে যায় — microservice, analytics, search index সবাই একই source-of-truth থেকে subscribe করতে পারে।
২ · তিন CDC পদ্ধতি
(ক) Query-based — সরল কিন্তু lossy
SELECT … WHERE updated_at > last_run. সবচেয়ে সরল।
- Pros: কোনো special permission লাগে না, যেকোনো DB-তে কাজ করে।
- Cons: DELETE detect হয় না (row চলে গেছে — কীভাবে জানবেন?); polling overhead; missed updates যদি একই second-এ একাধিক change হয়; latency = poll interval.
(খ) Trigger-based — invasive
DB trigger বসিয়ে — প্রতি INSERT/UPDATE/DELETE-এ একটি audit table-এ entry দিন। CDC consumer সেই audit table পড়ে।
- Pros: সব operation capture, transactional consistency.
- Cons: প্রতি write-এ extra DB work — latency বাড়ে, throughput কমে; schema বদলালে trigger update দরকার; production DB-তে DBA সচরাচর অনুমোদন দেন না।
(গ) Log-based — gold standard
DB-র native transaction log (MySQL binlog, Postgres WAL, SQL Server CDC, Oracle redo log) সরাসরি পড়া।
- Pros: source-এ প্রায় শূন্য overhead; সব operation capture; sub-second latency; transactional ordering preserve.
- Cons: DB-specific protocol, replication permission প্রয়োজন; initial snapshot + log streaming combine করা কঠিন; schema evolution-এ কেয়ার দরকার।
Modern data engineering-এ log-based CDC-ই default. বাকিগুলো legacy বা escape hatch.
৩ · MySQL binlog ও Postgres WAL — under the hood
MySQL binlog: প্রতিটি committed transaction binary log-এ লেখা হয় — replication-এর জন্য। binlog_format=ROW থাকলে — প্রতিটি row-level change (before + after image) capture. Debezium MySQL connector এই log পড়ে replica-র মতো।
Postgres WAL: Write-Ahead Log — প্রতিটি page-change WAL-এ লেখা হয় DB-তে commit-এর আগে। Logical replication slot তৈরি করে — Debezium সেই slot থেকে decoded change event পায়।
$$\text{transaction log} \;\Rightarrow\; \text{binlog/WAL} \;\Rightarrow\; \text{Debezium} \;\Rightarrow\; \text{Kafka topic}$$
৪ · Debezium — open-source CDC platform
DebeziumDebeziumRed Hat-এর open-source CDC platform (২০১৬)। Kafka Connect source connector হিসেবে চলে। MySQL, Postgres, MongoDB, SQL Server, Oracle, Cassandra সাপোর্ট। বিশ্বের production CDC-র ৭০%+ এতে। Red Hat-এর open-source project (২০১৬)। Kafka Connect-এর সাথে integrate — প্রতিটি DB-র জন্য একটি source connector. Configuration JSON-এ; কোনো code নেই।
- Initial snapshot: connector শুরুতে পুরো table read করে (consistent snapshot).
- Streaming phase: snapshot শেষে binlog/WAL position থেকে real-time event stream.
- Topic per table:
dbserver.dbname.tablenameformat. - Schema registry: Avro/Protobuf schema track — schema evolution handle.
৫ · Debezium event format
প্রতিটি event-এ থাকে — before (পরিবর্তনের আগের state), after (পরের state), op (c=create, u=update, d=delete, r=read snapshot), source (DB metadata).
op="d" event-এ after=null, before-এ মুছে যাওয়া row. এই পদ্ধতিতে delete-ও capture হয় — query-based-এ যেটা impossible.
৬ · Kafka Connect — execution layer
Debezium নিজে service নয় — Kafka Connect-এর plugin. Kafka Connect cluster JVM workers চালায়, connector configuration accept করে, fault tolerance + scaling সামলায়। দু'টি mode:
- Standalone: single JVM, dev/test.
- Distributed: multiple worker, shared metadata Kafka topic-এ। Production default.
৭ · CDC architecture — bank ledger replication
৮ · Debezium configuration — MySQL connector
Kafka Connect REST API-তে এই JSON POST করলে — connector চালু হয়।
{
"name": "bank-core-mysql",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"tasks.max": "1",
"database.hostname": "mysql.bank.local",
"database.port": "3306",
"database.user": "debezium",
"database.password": "${file:/secrets/db.properties:pwd}",
"database.server.id": "184054",
"database.server.name": "bank",
"database.include.list": "core",
"table.include.list": "core.transactions,core.accounts",
"schema.history.internal.kafka.bootstrap.servers": "kafka:9092",
"schema.history.internal.kafka.topic": "schema-history.bank",
"snapshot.mode": "initial",
"snapshot.locking.mode": "minimal",
"include.schema.changes": "true",
"decimal.handling.mode": "string",
"time.precision.mode": "connect",
"transforms": "unwrap",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"transforms.unwrap.drop.tombstones": "false",
"transforms.unwrap.delete.handling.mode": "rewrite"
}
}
snapshot.mode=initial — connector শুরুতে full table snapshot, তারপর binlog stream. decimal.handling.mode=string — money column-এ precision loss এড়াতে। ExtractNewRecordState SMT (Single Message Transform) Debezium-এর nested envelope থেকে শুধু after field বের করে — downstream consumer-এর জন্য সরল payload.
৯ · Bash — connector deploy ও monitor
# Connector POST
curl -s -X POST -H "Content-Type: application/json" \
--data @bank-core-mysql.json \
http://kafka-connect:8083/connectors
# Status check
curl -s http://kafka-connect:8083/connectors/bank-core-mysql/status | jq
# Topic-এ event দেখুন
kafka-console-consumer.sh \
--bootstrap-server kafka:9092 \
--topic bank.core.transactions \
--from-beginning \
--max-messages 5
# Lag check (snapshot শেষ কিনা)
kafka-consumer-groups.sh --bootstrap-server kafka:9092 \
--describe --group connect-bank-core-mysql
RUNNING দেখায়। প্রথম কিছু মিনিট snapshot — সব row op="r" (read) হিসেবে publish. তারপর live binlog tailing — INSERT "c", UPDATE "u", DELETE "d".
১০ · Bangladesh use cases
- Bank ledger → data lake: core banking MySQL থেকে S3 Iceberg-এ near-real-time replication. nightly batch dump-এর বদলে — risk team-এর জন্য always-fresh data.
- Daraz inventory sync: central catalog DB থেকে Elasticsearch search index, Redis cache, ও warehouse system-এ propagation.
- Microservice eventing: "outbox pattern" — service local DB-তে domain event লেখে; Debezium সেটাকে Kafka-তে publish. Distributed transaction এড়ানোর সবচেয়ে নির্ভরযোগ্য pattern.
- BTRC/regulatory reporting: Telco-র subscriber DB-র change real-time central regulator system-এ পাঠানো।
- Audit trail: CDC stream Iceberg-এ append-only — full history of every change, GDPR/audit-ready.
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ একটি Bangladeshi bank-এর core banking system থেকে data warehouse-এ "প্রতি ১৫ মিনিট" batch sync চলে। DBA বলছেন প্রতি batch-এ DB load বাড়ছে। আপনি CDC সুপারিশ করছেন — DBA-কে কীভাবে convince করবেন?
DBA-রা stability conservative থাকেন — যৌক্তিক কারণে। Core banking-এ ১ সেকেন্ড downtime মানে BDT লক্ষ-কোটি হারানো। তাই argument data-driven ও risk-aware হতে হবে।
Argument 1 — Source load comparison:
- Current batch: প্রতি ১৫ মিনিটে
SELECT * FROM transactions WHERE updated_at > ?। যদি ১০ লক্ষ row scan হয় — buffer pool eviction, lock contention, query plan disruption. - CDC log-based: binlog একটি sequential file — DB এটি rapidly fsync করে disk-এ। Debezium সেই file-ই পড়ে (replica-র মতো)। DB-র query engine-এ কোনো load নেই; শুধু binlog reader-এর কিছু network bandwidth.
- Empirical: large bank-এ batch query CPU ১৫-২৫% spike দেখায়; CDC ১-৩%.
Argument 2 — Replication-এর সমান সাবধানতা:
- "Binlog তো replica-র জন্য — আপনার team replication চালাচ্ছেন না কী?" — হ্যাঁ, prod-এ standby MySQL আছে। Debezium সেই same protocol ব্যবহার করে — শুধু আরেকটা replica যেন।
- Performance impact prod-এ একই — replica-র মতো।
Argument 3 — Risk mitigation:
- প্রথমে staging-এ চালান, ২ সপ্তাহ। সব load metric (CPU, IO, replication lag) compare.
- Production-এ read-replica থেকে CDC — primary-তে কোনো ছোঁয়া নেই। DBA-র সবচেয়ে বড় ভয় দূর।
- Snapshot phase carefully tune —
snapshot.locking.mode=minimalবাnone, off-peak হোক। - Connector পুরোপুরি কোনো ক্ষতিকর effect-এ pause/stop করার ability — DBA-র control.
Argument 4 — Business value:
- Latency ১৫ min → ১-২ second — fraud detection-এ এটা গেম-চেঞ্জার। ভাবুন ১০ মিনিটে ৫০ লক্ষ TK suspicious transfer; আপনি ১ minute-এ ধরে ৫ minute-এ block করতে পারবেন।
- DELETE detection — current batch সম্পূর্ণ miss করে, যা compliance audit-এ ভয়াবহ।
- Multiple consumer একই stream subscribe — risk, fraud, KYC, marketing — প্রতি team-এর আলাদা batch query bypass.
Argument 5 — Industry precedent:
- JPMorgan, Goldman, ING — সবাই Debezium-based CDC production-এ চালায়।
- Bangladesh-এ Brac Bank, City Bank-এর modern data team-এ এটা চালু হচ্ছে।
- "Industry standard" বললে DBA-রা আরো comfortable.
DBA-র objections আগেই address করুন:
- "Binlog disk-fill হবে" → retention policy + monitoring; standby-র জন্য already retained.
- "Schema change-এ break হবে" → Debezium schema evolution support; DDL events captured.
- "Network failure-এ data loss" → checkpoint + replay from last LSN — exactly-once recovery.
মূল উপলব্ধি: CDC sales pitch শুধু feature list নয় — risk mitigation plan. DBA-র মতো production-conscious stakeholder-কে শুধু performance data, gradual rollout, এবং rollback plan দেখাতে পারলেই তারা buy-in দেন। Engineering = communication + persuasion + technology.
প্র ০২ Daraz-এর inventory DB-তে CDC বসাচ্ছেন — search index, cache, warehouse system সবাই subscribe করবে। কিন্তু স্কিমা একদিন বদলে গেল (নতুন column যোগ)। কী হবে?
Schema evolution distributed system-এর সবচেয়ে কঠিন সমস্যাগুলোর একটি। CDC pipeline-এ এটা বিশেষভাবে — কারণ producer (DB) আর consumer-এর version unsynchronized হতে পারে দিনের পর দিন।
Debezium কীভাবে handle করে:
include.schema.changes=true— DDL event আলাদা topic-এ publish হয়।- Connector internal "schema history" topic-এ সব DDL track করে; binlog-এ এক বছর আগের event এলেও — সেই version-এর schema দিয়ে decode সম্ভব।
- নতুন event-এ নতুন field automatically appear.
Consumer side challenge:
- Search index (Elasticsearch): dynamic mapping enabled থাকলে — নতুন field auto-add. কিন্তু wrong type-এ infer হতে পারে। Solution: explicit mapping template.
- Cache (Redis): JSON store — নতুন field harmless, ignore হবে। কিন্তু কোনো consumer যদি field absence assume করে — bug.
- Warehouse (Iceberg/Delta): এদের schema evolution native — নতুন column add হলে old data-তে NULL. কিন্তু column drop, type change — destructive change, careful migration লাগে।
Schema Registry — best practice:
- Avro/Protobuf serialization + Confluent Schema Registry.
- Compatibility mode: BACKWARD — নতুন schema পুরোনো consumer-এ deserialize করতে পারে। নতুন field-এর default value থাকতে হবে।
- FULL compatibility — দুদিকেই compatible. সবচেয়ে নিরাপদ।
- Producer (Debezium) Schema Registry-তে register; consumer fetch করে dynamic deserialize.
Breaking changes — কী করবেন:
- Column drop: deprecated mark করুন, ৩-৬ মাস wait, তারপর drop. Consumer-দের update করতে দিন।
- Type change (VARCHAR → INT): never in-place — নতুন column add, app dual-write, পুরোনো deprecate.
- Required new column: nullable হিসেবে add, default value, কোডে slowly mandatory.
Daraz-specific scenario:
- "discount_pct" নতুন column add হলো inventory table-এ।
- Debezium event-এ
after.discount_pctimmediately appear. - Search team এই field index করতে চাইলে — Elasticsearch mapping update; reindex existing docs (কারণ পুরোনো event-এ ছিল না)।
- Cache → no-op, JSON ignore.
- Warehouse → Iceberg ALTER TABLE ADD COLUMN; পুরোনো partition-এ NULL.
- Analytics dashboard query-এ
COALESCE(discount_pct, 0)defensive.
Communication & process:
- "Schema-as-code" repo — সব table definition Git-এ। Pull request দিয়ে যেকোনো DDL.
- Slack channel #cdc-schema-changes — DDL deploy-এর আগেই broadcast.
- Contract testing — consumer-গুলো sample CDC payload-এর বিরুদ্ধে CI-তে validate.
মূল উপলব্ধি: CDC একদিকে producer DB, অন্যদিকে diverse consumer-এর contract. Schema হলো সেই contract-এর ভাষা। Schema Registry + backward-compat + clear process — এই তিন ছাড়া CDC pipeline ৬ মাসে production নরকে পরিণত হবে। Tool যত ভালো হোক, governance ছাড়া অসম্ভব।
প্র ০৩ Outbox pattern কী, এবং কেন এটা microservice-এ "dual write" সমস্যার সবচেয়ে নির্ভরযোগ্য সমাধান?
Microservice architecture-এ একটি classic problem — service local DB-তে data সংরক্ষণ করে এবং Kafka-তে event publish করে। দু'টি ভিন্ন system-এ atomic write কিভাবে?
Naive approach (broken):
// pseudo
db.save(order); // step 1
kafka.publish(event); // step 2
- Step 1 success, step 2 fail (network, broker down) → DB-তে order আছে কিন্তু event missing. Inventory adjust হলো না, customer-কে confirmation যায়নি।
- Step 1 success, step 2 success, কিন্তু crash before commit → duplicate event সম্ভব।
- "Two-phase commit (XA)" — distributed transaction — performance horrendous, ops nightmare, modern systems-এ rejected.
Outbox pattern:
- একই DB-তে একটি
outboxtable তৈরি। - Order save এবং outbox-এ event row insert — দু'টোই একই DB transaction-এ → atomic.
- Debezium সেই outbox table-এ CDC বসায় → Kafka-তে event publish.
- Outbox row delete বা archive (idempotent flag).
BEGIN;
INSERT INTO orders (id, user, amount) VALUES (...);
INSERT INTO outbox (event_type, payload, ts)
VALUES ('OrderCreated', '{...}', now());
COMMIT;
-- Debezium captures the outbox INSERT, publishes to Kafka
কেন এটা bulletproof:
- Atomic: দু'টি write এক transaction-এ — হয় দু'টোই save, না হলে কোনোটাই না।
- Reliable delivery: Debezium binlog-এ outbox INSERT দেখলেই — Kafka-তে publish. Kafka temporarily down থাকলেও — later replay.
- Exactly-once: Debezium offset checkpoint + Kafka transactional sink → প্রতিটি outbox row ঠিক একবার Kafka-তে।
- No service code complexity: service শুধু একটা সাধারণ DB transaction লেখে। Kafka client, retry logic, circuit breaker — কিছুই দরকার নেই।
Bangladesh use case (bKash):
- Money send —
transactionstable-এ row +outbox-এ{type: TransferComplete, sender, receiver, amount}। - Atomic commit.
- Debezium event Kafka topic
bkash.outbox.transfer-এ যায়। - Notification service event consume → SMS পাঠায়।
- Fraud service event consume → real-time score.
- Ledger service event consume → ledger DB-তে update.
- Service crash বা Kafka outage হলেও — outbox row binlog-এ আছে, Debezium recovery-এ replay.
Implementation tips:
- Outbox row-এ
event_idUUID — consumer-এ idempotency check. - Debezium
OutboxEventRouterSMT — outbox row থেকে appropriate Kafka topic-এ route. - Old outbox rows TTL/cleanup job — DB bloat avoid.
- Schema versioning event payload-এ — schema change সামাল।
Trade-offs:
- Latency: outbox INSERT → Debezium read → Kafka publish — সাধারণত ১-৫ সেকেন্ড। Sub-100ms চাইলে inadequate.
- Service-DB-Debezium ৩-component dependency — operational overhead.
- Outbox table যদি hot হয় — DB write amplification.
মূল উপলব্ধি: "Just send to Kafka after DB commit" simple-looking কিন্তু catastrophically broken at scale. Outbox pattern একটি database transaction-এর atomicity-কে distributed event delivery-র correctness-এ rope করে। বাংলাদেশ ও বিশ্বের সব serious microservice architecture (bKash, Pathao backend, Daraz checkout) এই pattern-এ চলে। CDC ছাড়া এই pattern impossible — তাই CDC শুধু analytics tool নয়, microservice-এর basic infrastructure.
প্র ০৪ আপনি একটা Bangladeshi insurance startup-এ join করলেন। Production MySQL-এ ১০০ table আছে, পুরোনো batch ETL ১২ ঘণ্টায় সব dump করে। CDC migration plan কী?
Greenfield CDC সহজ; existing batch থেকে migration কঠিন। সাবধানতার সাথে phased rollout লাগবে — production কে কখনোই disrupt করা যাবে না।
Phase 0 — Discovery (২ সপ্তাহ):
- ১০০ table-এর ক্রমিক list — কোনটা PII, কোনটা high-volume, কোনটা rarely-changing.
- Downstream consumers map — কারা batch dump-এ depend. Risk team? Reporting? Marketing?
- Current batch SLA — সকাল ৬টার মধ্যে data warehouse-এ ready হতে হবে?
- DBA stakeholder interview — concerns, infrastructure (replica আছে?)।
- MySQL config check:
binlog_format=ROW,binlog_row_image=FULL, retention যথেষ্ট কিনা।
Phase 1 — Infrastructure (৩-৪ সপ্তাহ):
- Kafka cluster setup (managed: AWS MSK, Confluent Cloud) বা self-host. ৩-broker minimum.
- Kafka Connect distributed cluster — ৩ worker.
- Schema Registry (Confluent বা Apicurio).
- Monitoring: Prometheus + Grafana + Kafka Connect metrics + connector lag alerts.
- MySQL read-replica যদি না থাকে — production team-এর সাথে কাজ করে set up. CDC এই replica থেকে।
- Network/security: Kafka Connect → MySQL VPC peering, TLS, ACL.
Phase 2 — Pilot (৪-৬ সপ্তাহ):
- ৫টা low-risk table বাছুন — যেমন
products,categories,policy_types. Volume মাঝারি, schema stable. - Debezium connector deploy. Initial snapshot off-peak (রাত ২টা)।
- Kafka topic-এ event flow verify. Schema Registry-তে schema register.
- Sink consumer তৈরি — Iceberg-এ append/upsert. Existing batch parallel চালু থাকবে।
- Daily reconciliation: CDC-derived warehouse table vs batch-derived — count, sum, max(updated_at) match কিনা।
- ২ সপ্তাহ smooth চললে — Phase 3.
Phase 3 — Expansion (৮-১২ সপ্তাহ):
- Table-গুলো group-এ migrate (১০ table প্রতি সপ্তাহ)।
- High-volume / high-risk table (e.g.,
claims,payments) সবচেয়ে শেষে — সব lesson learned apply করার পর। - Stakeholder communication — risk, marketing team-এ access bridge (CDC stream → আগের warehouse table-এর adapter).
- Data quality framework — CDC-derived data-তে freshness, completeness, accuracy check.
Phase 4 — Cutover (২ সপ্তাহ):
- সব table CDC-তে migrate, ১ মাস dual-running.
- Reconciliation report — discrepancy <০.০১% হলে batch decommission.
- Old batch jobs disable, archive, document the change.
- Cost saving compute — DBA-কে দেখান (CFO-কে justify করার জন্য)।
Risk mitigation throughout:
- Rollback plan ready: connector pause + batch resume — ১৫ মিনিটের মধ্যে।
- On-call rotation Phase 2 থেকে।
- Documentation runbook: connector restart, snapshot trigger, lag alert response.
- Kafka retention conservative শুরুতে (৭ days), পরে কমান।
Common pitfalls:
- "সব table একসাথে migrate" — অসম্ভব। Connector load, schema issue, downstream surprise — হবেই।
- "Pilot skip করা" — production-এ first try কখনোই না।
- "Reconciliation skip করা" — silent data drift detect না হলে — ৩ মাস পর audit-এ ধরা পড়লে catastrophic.
- "Schema Registry skip করা" — short-term সহজ, long-term debt.
- "Stakeholder communicate না করা" — ML team batch table-এ depend করছে, একদিন তাদের না জানিয়ে cutover — trust ধ্বংস।
Timeline summary: ২০-২৪ সপ্তাহ (৫-৬ মাস) — সাবধানী, gradual. দ্রুত করতে চাইলে production accident certain.
Business case slide (CTO-কে):
- Latency: ১২ ঘণ্টা → ৩০ সেকেন্ড। Risk team realtime fraud, claims team near-real-time visibility.
- DB load: peak query 25% → 3%. DB infra scale-down possible.
- Reliability: batch failure (~মাসে ১-২ বার) → fault-tolerant streaming.
- Cost: ETL Hadoop cluster ($৩K/মাস) → Kafka + Connect ($১.৫K/মাস)।
- Future-proof: microservice eventing, real-time dashboard — সব unlocked.
মূল উপলব্ধি: CDC migration একটা technology project-এর চেয়ে বেশি — organizational change. Engineer-এর কাজ — risk-aware, communication-rich, gradual rollout. "Big bang" cutover-এ blast radius বড়; phased approach-এ each step revertible. Bangladesh-এর insurance/banking-এ এই discipline-ই প্রকৃত মূল্য আনে।
অনুশীলন
-
পদ্ধতি বাছুন: একটি startup MongoDB থেকে CDC চাচ্ছে। কোন পদ্ধতি ও কেন?
Log-based. MongoDB-র oplog (operations log) replication-এর জন্য — Debezium MongoDB connector এই oplog পড়ে। Source MongoDB-তে কোনো query overhead নেই, full insert/update/delete capture, replica set requirement (production-এ এমনিতেই থাকে)।
Trigger-based MongoDB-তে নেই (no native triggers); query-based
find({updated_at: {$gt: ?}})সম্ভব কিন্তু DELETE miss হবে। -
Debezium event পড়ুন: এই event-এ কী operation? কী বদলেছে?
{ "op": "u", "before": {"id": 7, "balance": 5000}, "after": {"id": 7, "balance": 4500}, "source": {"table": "accounts"} }op="u"= UPDATE.accountstable-এid=7row-এরbalance৫,০০০ → ৪,৫০০ (৫০০ withdraw).Downstream consumer-এ এই event দিয়ে — fraud check (sudden ৫০০ TK debit?), notification (SMS), warehouse upsert সব trigger.
-
Design করুন: Daraz-এর order table-এ CDC বসিয়ে — search index, fraud detection, notification তিনটি system update করতে চান। Kafka topic structure কেমন হবে?
- Single topic, multiple consumers:
daraz.shop.orders— তিনটি consumer group (search-indexer, fraud-detector, notif-sender) একই topic থেকে independent offset-এ পড়বে। - Key:
order_id— একই order-এর সব event একই partition-এ → ordering preserved. - Partition count: ১২-২৪ — peak rate ও parallelism অনুযায়ী।
- Retention: ৭ days (replay buffer).
- SMT: ExtractNewRecordState — payload simplified.
fan-out তিনটি consumer একে অপরকে ব্যাক করে না; একজন slow হলে others affected না (Kafka-র killer feature).
- Single topic, multiple consumers:
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ২২ · Snowflake পরিচিতি পরবর্তী পাঠ Cloud data warehouse — CDC stream-এর প্রিয় destination.
- পাঠ ২০ · Apache Flink পরিচিতি আগের পাঠ CDC stream Flink-এ process করে real-time aggregation, fraud detection.
- পাঠ ১৭ · Apache Kafka পরিচিতি এই পাঠের সাথে সম্পর্কিত CDC-র backbone. Kafka Connect-এর উপর Debezium চলে।
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।