{"id":4519,"date":"2025-08-10T22:39:13","date_gmt":"2025-08-10T22:39:13","guid":{"rendered":"https:\/\/uplatz.com\/blog\/?p=4519"},"modified":"2025-08-10T22:52:26","modified_gmt":"2025-08-10T22:52:26","slug":"apache-kafka-pocket-book","status":"publish","type":"post","link":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/","title":{"rendered":"Apache Kafka Pocket Book"},"content":{"rendered":"<p><!-- Apache Kafka Pocket Book \u2014 Uplatz (50 Expanded Cards, One-Column Colorful Layout) --><\/p>\n<div style=\"margin:20px 0;\">\n<style>\n    .wp-kafka-pb { font-family: Arial, sans-serif; max-width: 1120px; margin:0 auto; }\n    .wp-kafka-pb .heading{\n      background: linear-gradient(135deg, #60a5fa, #a78bfa);\n      color:#fff; padding:24px; border-radius:14px;\n      text-align:center; margin-bottom:24px; box-shadow:0 8px 20px rgba(0,0,0,.10);\n    }\n    .wp-kafka-pb .heading h2{ margin:0; font-size:2rem; }\n    .wp-kafka-pb .heading p{ margin:6px 0 0; font-size:1.02rem; opacity:.98; }<\/p>\n<p>    \/* Card base *\/\n    .wp-kafka-pb .card{\n      padding:20px; border-radius:12px; border-left:8px solid transparent;\n      box-shadow:0 6px 16px rgba(0,0,0,.06); margin-bottom:18px;\n    }\n    .wp-kafka-pb .card h3{ margin:0 0 10px; font-size:1.15rem; color:#0f172a; }\n    .wp-kafka-pb .card p, .wp-kafka-pb .card ul, .wp-kafka-pb .card ol{\n      margin:0; color:#334155; font-size:.98rem; line-height:1.66;\n    }\n    .wp-kafka-pb ul{ margin-top:8px; padding-left:20px; }\n    .wp-kafka-pb pre{\n      background:#f8fafc; border:1px solid #e5e7eb; color:#111827;\n      padding:12px; border-radius:8px; overflow:auto; font-size:.92rem; line-height:1.55;\n      white-space:pre-wrap;\n    }\n    .mono{ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; }<\/p>\n<p>    \/* Soft color helpers (used inline too) *\/\n    .c-blue{ background:#e0f2fe; border-left-color:#3b82f6; }\n    .c-cyan{ background:#cffafe; border-left-color:#06b6d4; }\n    .c-indigo{ background:#eef2ff; border-left-color:#6366f1; }\n    .c-violet{ background:#ede9fe; border-left-color:#8b5cf6; }\n    .c-amber{ background:#fef3c7; border-left-color:#f59e0b; }\n    .c-orange{ background:#fff7ed; border-left-color:#f97316; }\n    .c-green{ background:#ecfdf5; border-left-color:#10b981; }\n    .c-emerald{ background:#f0fdf4; border-left-color:#059669; }\n    .c-lime{ background:#dcfce7; border-left-color:#22c55e; }\n    .c-rose{ background:#fff1f2; border-left-color:#fb7185; }\n    .c-red{ background:#fee2e2; border-left-color:#ef4444; }\n    .c-slate{ background:#f8fafc; border-left-color:#334155; }\n  <\/style>\n<div class=\"wp-kafka-pb\">\n<div class=\"heading\">\n<h2>Apache Kafka Pocket Book \u2014 Uplatz<\/h2>\n<p>50 Expanded Cards \u2022 One-Column Colorful Layout \u2022 Fundamentals \u00b7 Ops \u00b7 Dev \u00b7 Streams \u00b7 Connect \u00b7 Security \u00b7 20 Interview Q&amp;A<\/p>\n<\/p><\/div>\n<p>    <!-- ===================== SECTION 1 \u2014 FOUNDATIONS (1\u201310) ===================== --><\/p>\n<div class=\"card c-blue\">\n<h3>1) What is Apache Kafka?<\/h3>\n<p>Kafka is a distributed event streaming platform for publishing, subscribing, storing, and processing streams of records at scale. It powers real-time pipelines (ETL\/ELT), event-driven microservices, and analytics. Its append-only commit logs, partitioning, and replication enable high throughput and fault tolerance.<\/p>\n<\/p><\/div>\n<div class=\"card c-green\">\n<h3>2) Core Building Blocks<\/h3>\n<ul>\n<li><b>Topic<\/b> \u2014 named stream of records.<\/li>\n<li><b>Partition<\/b> \u2014 ordered, immutable log per topic shard (ordering guaranteed per partition).<\/li>\n<li><b>Producer<\/b> \u2014 app that publishes records.<\/li>\n<li><b>Consumer<\/b> \u2014 app that reads records.<\/li>\n<li><b>Broker<\/b> \u2014 Kafka server storing partitions.<\/li>\n<li><b>Cluster<\/b> \u2014 group of brokers.<\/li>\n<\/ul><\/div>\n<div class=\"card c-amber\">\n<h3>3) Why Kafka vs. Traditional MQ?<\/h3>\n<p>Classic MQs focus on transient queues and immediate delivery. Kafka decouples producers\/consumers with durable logs, long retention, replayability, and horizontal scale. It\u2019s optimized for throughput and event streaming rather than request\/response RPC.<\/p>\n<\/p><\/div>\n<div class=\"card c-violet\">\n<h3>4) Partitioning &#038; Keys<\/h3>\n<p>Producers optionally send a <b>key<\/b> per record. A partitioner maps key \u2192 partition (hash by default). All records with the same key land on the same partition, preserving their relative order.<\/p>\n<pre class=\"mono\"><code># Java Producer: keyed send\r\nproducer.send(new ProducerRecord<>(\"payments\", userId, payload));<\/code><\/pre>\n<\/p><\/div>\n<div class=\"card c-red\">\n<h3>5) Offsets &#038; Consumer Groups<\/h3>\n<p>Each record in a partition has a sequential <b>offset<\/b>. Consumers in the same <b>group<\/b> share partitions (each partition assigned to exactly one consumer at a time), enabling parallelism and scalability. Offsets are committed so consumption can resume after restarts.<\/p>\n<\/p><\/div>\n<div class=\"card c-cyan\">\n<h3>6) Delivery Semantics<\/h3>\n<ul>\n<li><b>At-most-once<\/b> \u2014 commit before processing; no dupes, possible loss.<\/li>\n<li><b>At-least-once<\/b> \u2014 commit after processing; no loss, possible dupes.<\/li>\n<li><b>Exactly-once<\/b> \u2014 idempotent + transactional processing; no loss, no dupes.<\/li>\n<\/ul><\/div>\n<div class=\"card c-indigo\">\n<h3>7) Retention &#038; Compaction<\/h3>\n<p><b>Time\/size retention<\/b> keeps all records for a period\/size. <b>Log compaction<\/b> retains only the latest record per key (great for changelogs\/state), while still allowing historical snapshots if combined with time retention.<\/p>\n<\/p><\/div>\n<div class=\"card c-orange\">\n<h3>8) Brokers, Leaders &#038; Replicas<\/h3>\n<p>Each partition has a <b>leader<\/b> replica that handles reads\/writes and <b>follower<\/b> replicas for redundancy. If a leader fails, an in-sync follower becomes leader (controller manages elections).<\/p>\n<\/p><\/div>\n<div class=\"card c-lime\">\n<h3>9) KRaft (No ZooKeeper)<\/h3>\n<p>Newer Kafka can run in <b>KRaft<\/b> mode, replacing ZooKeeper with built-in Raft-based metadata quorum. Benefits: simpler ops, fewer moving parts, consistent metadata handling.<\/p>\n<\/p><\/div>\n<div class=\"card c-emerald\">\n<h3>10) Typical Use Cases<\/h3>\n<ul>\n<li>Streaming ETL (DB \u2192 Kafka \u2192 S3\/DWH)<\/li>\n<li>Event sourcing &#038; CQRS in microservices<\/li>\n<li>Log\/metrics collection at scale<\/li>\n<li>Real-time recommendations &#038; fraud detection<\/li>\n<\/ul><\/div>\n<p>    <!-- ===================== SECTION 2 \u2014 DEVELOPMENT ESSENTIALS (11\u201320) ===================== --><\/p>\n<div class=\"card c-blue\">\n<h3>11) Producer Essentials (Java)<\/h3>\n<pre class=\"mono\"><code>Properties p = new Properties();\r\np.put(\"bootstrap.servers\",\"localhost:9092\");\r\np.put(\"acks\",\"all\");                   \/\/ strongest durability\r\np.put(\"retries\",\"10\");                 \/\/ retry on transient failures\r\np.put(\"enable.idempotence\",\"true\");   \/\/ dedupe on broker\r\nKafkaProducer&lt;String,String&gt; producer = new KafkaProducer<>(p);<\/code><\/pre>\n<p>Use <code>acks=all<\/code> + <code>enable.idempotence=true<\/code> for durability + no duplicates at source.<\/p>\n<\/p><\/div>\n<div class=\"card c-green\">\n<h3>12) Consumer Essentials (Java)<\/h3>\n<pre class=\"mono\"><code>Properties p = new Properties();\r\np.put(\"bootstrap.servers\",\"localhost:9092\");\r\np.put(\"group.id\",\"billing-service\");\r\np.put(\"enable.auto.commit\",\"false\");   \/\/ manual commits\r\nKafkaConsumer&lt;String,String&gt; c = new KafkaConsumer<>(p);\r\nc.subscribe(Arrays.asList(\"payments\"));<\/code><\/pre>\n<p>Prefer manual (sync\/async) commits after successful processing to avoid data loss.<\/p>\n<\/p><\/div>\n<div class=\"card c-amber\">\n<h3>13) Manual Offset Commit Pattern<\/h3>\n<pre class=\"mono\"><code>while (true) {\r\n  ConsumerRecords&lt;K,V&gt; recs = consumer.poll(Duration.ofMillis(500));\r\n  for (ConsumerRecord&lt;K,V&gt; r : recs) process(r);\r\n  consumer.commitSync(); \/\/ after processing batch\r\n}<\/code><\/pre>\n<p>Commit after handling a batch to balance reliability and throughput.<\/p>\n<\/p><\/div>\n<div class=\"card c-violet\">\n<h3>14) Rebalancing &#038; Sticky Assignor<\/h3>\n<p>When group membership changes, partitions are reassigned. Use sticky assignors to reduce churn and leverage <b>cooperative rebalancing<\/b> for smoother transitions.<\/p>\n<\/p><\/div>\n<div class=\"card c-red\">\n<h3>15) Handling Poison Messages<\/h3>\n<p>For bad records, avoid blocking the stream. Send invalid messages to a <b>DLQ (dead letter queue)<\/b> topic with error metadata; monitor and reprocess later.<\/p>\n<pre class=\"mono\"><code>\/\/ pseudo\r\ntry { process(record); } \r\ncatch (Exception e) { produceTo(\"payments.DLQ\", wrap(record, e)); }<\/code><\/pre>\n<\/p><\/div>\n<div class=\"card c-cyan\">\n<h3>16) Throughput Levers<\/h3>\n<ul>\n<li>Producers: <code>linger.ms<\/code>, <code>batch.size<\/code>, compression (<code>lz4<\/code>, <code>snappy<\/code>)<\/li>\n<li>Consumers: poll loop cadence, max poll records, async processing<\/li>\n<li>Topic layout: more partitions (up to a point) for parallelism<\/li>\n<\/ul><\/div>\n<div class=\"card c-indigo\">\n<h3>17) Ordering Guarantees<\/h3>\n<p>Ordering is per partition. To maintain order across related events, use a stable key (e.g., accountId). Avoid changing partition counts frequently on strictly ordered topics.<\/p>\n<\/p><\/div>\n<div class=\"card c-orange\">\n<h3>18) Idempotent Producers<\/h3>\n<p>With <code>enable.idempotence=true<\/code>, brokers dedupe producer re-sends using producerId\/sequence numbers, preventing duplicates on retry.<\/p>\n<\/p><\/div>\n<div class=\"card c-lime\">\n<h3>19) Transactions &#038; Exactly-Once<\/h3>\n<p>Use producer transactions to atomically write to multiple partitions\/topics and commit consumer offsets in the same transaction (read-process-write pattern) for EOS.<\/p>\n<pre class=\"mono\"><code>producer.initTransactions();\r\nproducer.beginTransaction();\r\n\/\/ read from input, process, send to output\r\nproducer.sendOffsetsToTransaction(offsets, consumerGroupId);\r\nproducer.commitTransaction();<\/code><\/pre>\n<\/p><\/div>\n<div class=\"card c-emerald\">\n<h3>20) Serialization &#038; Schema Management<\/h3>\n<p>Use Avro\/Protobuf\/JSON Schema with a Schema Registry to enforce compatibility (backward\/forward\/full). This avoids breaking consumers on schema evolution.<\/p>\n<\/p><\/div>\n<p>    <!-- ===================== SECTION 3 \u2014 OPERATIONS & RELIABILITY (21\u201330) ===================== --><\/p>\n<div class=\"card c-blue\">\n<h3>21) Topic Design &#038; Sizing<\/h3>\n<ul>\n<li>Estimate events\/sec \u00d7 record size \u2192 throughput.<\/li>\n<li>Decide partitions for consumer parallelism headroom.<\/li>\n<li>Replication factor (3 typical) for HA.<\/li>\n<\/ul><\/div>\n<div class=\"card c-green\">\n<h3>22) Retention Policies<\/h3>\n<p>Set <code>retention.ms<\/code> \/ <code>retention.bytes<\/code> per topic. Use tiered storage (if available in your distro) for cheaper long-term retention without overloading brokers.<\/p>\n<\/p><\/div>\n<div class=\"card c-amber\">\n<h3>23) Log Compaction Use Cases<\/h3>\n<p>Perfect for changelog\/state topics: user profiles, account balances, last known device state. Combine with snapshots for fast rebuilds.<\/p>\n<\/p><\/div>\n<div class=\"card c-violet\">\n<h3>24) Monitoring Must-Haves<\/h3>\n<ul>\n<li>Broker health: CPU, disk, network, GC<\/li>\n<li>Lag per consumer group\/partition<\/li>\n<li>Request\/response rates, produce\/fetch latency<\/li>\n<li>Under-replicated partitions (URP) &#038; offline replicas<\/li>\n<\/ul><\/div>\n<div class=\"card c-red\">\n<h3>25) Security (AuthN\/Z &#038; Encryption)<\/h3>\n<ul>\n<li><b>TLS<\/b> in transit<\/li>\n<li><b>SASL<\/b> (SCRAM\/OAuth) for authentication<\/li>\n<li><b>ACLs<\/b> for topic\/cluster authorization<\/li>\n<li>Principle of least privilege<\/li>\n<\/ul><\/div>\n<div class=\"card c-cyan\">\n<h3>26) Capacity &#038; Scale<\/h3>\n<p>Add brokers to scale storage\/IO; rebalance partitions; consider rack awareness to spread replicas across failure domains.<\/p>\n<\/p><\/div>\n<div class=\"card c-indigo\">\n<h3>27) Multi-Region &#038; DR<\/h3>\n<p>Use cluster-to-cluster replication (MirrorMaker-like solutions) for DR and regional reads. Choose active-active or active-passive patterns based on consistency and failover needs.<\/p>\n<\/p><\/div>\n<div class=\"card c-orange\">\n<h3>28) Upgrades &#038; Rolling Restarts<\/h3>\n<p>Perform rolling upgrades broker-by-broker; monitor URP\/latency; validate inter-broker protocol compatibility. Back up critical metadata.<\/p>\n<\/p><\/div>\n<div class=\"card c-lime\">\n<h3>29) Troubleshooting Lag<\/h3>\n<ul>\n<li>Increase consumer parallelism (more instances\/partitions)<\/li>\n<li>Speed processing (batch, async, faster sinks)<\/li>\n<li>Tune <code>max.poll.interval.ms<\/code>, <code>max.poll.records<\/code><\/li>\n<\/ul><\/div>\n<div class=\"card c-emerald\">\n<h3>30) Cost Awareness<\/h3>\n<p>Right-size partitions, apply compression, avoid tiny messages (batch), offload cold data, and watch cross-zone transfer fees in cloud.<\/p>\n<\/p><\/div>\n<p>    <!-- ===================== SECTION 4 \u2014 STREAMS, CONNECT & ECOSYSTEM (31\u201340) ===================== --><\/p>\n<div class=\"card c-blue\">\n<h3>31) Kafka Streams: KTable vs KStream<\/h3>\n<p><b>KStream<\/b> is an unbounded stream of records. <b>KTable<\/b> is a changelog stream representing the latest value per key (like a materialized view). Joins and aggregations differ between them.<\/p>\n<\/p><\/div>\n<div class=\"card c-green\">\n<h3>32) Streams DSL Example (Java)<\/h3>\n<pre class=\"mono\"><code>StreamsBuilder b = new StreamsBuilder();\r\nKStream&lt;String,String&gt; in = b.stream(\"orders\");\r\nKTable&lt;String,Long&gt; counts = in\r\n  .groupByKey()\r\n  .count(Materialized.as(\"order-counts\"));\r\ncounts.toStream().to(\"orders.counts\");<\/code><\/pre>\n<p>State stores back this aggregation; compacted changelogs ensure fault tolerance.<\/p>\n<\/p><\/div>\n<div class=\"card c-amber\">\n<h3>33) Windowing &#038; Time Semantics<\/h3>\n<p>Use hopping\/tumbling\/session windows; choose <b>event time<\/b> and configure <b>grace<\/b> periods for late data. Watermarks bound lateness.<\/p>\n<\/p><\/div>\n<div class=\"card c-violet\">\n<h3>34) Interactive Queries<\/h3>\n<p>Expose Streams state stores (read-only) via a service to query materialized views (e.g., aggregate per customer). Ensure metadata routing for the right host.<\/p>\n<\/p><\/div>\n<div class=\"card c-red\">\n<h3>35) Error Handling in Streams<\/h3>\n<p>Use deserialization exception handlers, production exception handlers, and DLQs. Consider <b>exactly-once_v2<\/b> processing guarantees when enabled.<\/p>\n<\/p><\/div>\n<div class=\"card c-cyan\">\n<h3>36) Kafka Connect Basics<\/h3>\n<p>Connectors are <b>Source<\/b> (external \u2192 Kafka) or <b>Sink<\/b> (Kafka \u2192 external). Distributed workers scale out; configs can be REST-managed. Use transforms (SMTs) to tweak payloads.<\/p>\n<\/p><\/div>\n<div class=\"card c-indigo\">\n<h3>37) JDBC Source &#038; S3 Sink (Example)<\/h3>\n<pre class=\"mono\"><code>\/\/ POST \/connectors\r\n{\r\n \"name\":\"jdbc-orders-src\",\r\n \"config\":{\r\n   \"connector.class\":\"io.confluent.connect.jdbc.JdbcSourceConnector\",\r\n   \"connection.url\":\"jdbc:postgresql:\/\/db:5432\/app\",\r\n   \"mode\":\"incrementing\", \"incrementing.column.name\":\"id\",\r\n   \"topic.prefix\":\"db.orders.\"\r\n }}\r\n\/\/ Sink to S3: \"connector.class\":\"io.confluent.connect.s3.S3SinkConnector\"<\/code><\/pre>\n<\/p><\/div>\n<div class=\"card c-orange\">\n<h3>38) Schema Registry &#038; Compatibility<\/h3>\n<p>Register subject versions and enforce compatibility (BACKWARD\/FORWARD\/FULL). Add fields with defaults; avoid removing required fields to keep consumers happy.<\/p>\n<\/p><\/div>\n<div class=\"card c-lime\">\n<h3>39) ksqlDB (SQL on Streams)<\/h3>\n<p>Define streams\/tables with SQL, perform joins and aggregations without writing Java. Good for rapid prototyping and analytics on Kafka data.<\/p>\n<\/p><\/div>\n<div class=\"card c-emerald\">\n<h3>40) Local Dev &#038; Testing<\/h3>\n<p>Use Docker Compose to spin up Kafka + Schema Registry + Connect. For unit tests, Embedded Kafka (testcontainers) simulates brokers; use fake time to test windowing.<\/p>\n<\/p><\/div>\n<p>    <!-- ===================== SECTION 5 \u2014 INTERVIEW Q&A (41\u201350) ===================== --><\/p>\n<div class=\"card c-blue\">\n<h3>41) Q: Kafka vs RabbitMQ?<\/h3>\n<p><b>A:<\/b> Kafka is a distributed log for high-throughput streaming and long retention; RabbitMQ is a broker for traditional queues and immediate delivery. Kafka excels at replay, partitioned scale, and stream processing ecosystems.<\/p>\n<\/p><\/div>\n<div class=\"card c-green\">\n<h3>42) Q: How does Kafka ensure durability?<\/h3>\n<p><b>A:<\/b> Replication (RF\u22653), commit to leader + in-sync replicas (<code>acks=all<\/code>), fsync policies, and recovery via logs. Idempotent producers prevent dupes on retry.<\/p>\n<\/p><\/div>\n<div class=\"card c-amber\">\n<h3>43) Q: What is consumer lag and how to reduce it?<\/h3>\n<p><b>A:<\/b> Lag = latest offset \u2212 committed offset. Reduce by increasing consumer instances\/partitions, optimizing processing (batch\/async), and tuning poll\/commit parameters.<\/p>\n<\/p><\/div>\n<div class=\"card c-violet\">\n<h3>44) Q: When to use log compaction?<\/h3>\n<p><b>A:<\/b> For changelog\/state topics where only the latest value per key matters (e.g., account state). It enables fast rebuilds of state stores\/materialized views.<\/p>\n<\/p><\/div>\n<div class=\"card c-red\">\n<h3>45) Q: Exactly-Once Processing setup?<\/h3>\n<p><b>A:<\/b> Enable idempotent + transactional producer; wrap read-process-write and offset commits in a single transaction using <code>sendOffsetsToTransaction<\/code>. Streams can enable <code>processing.guarantee=exactly_once_v2<\/code>.<\/p>\n<\/p><\/div>\n<div class=\"card c-cyan\">\n<h3>46) Q: Ensuring message ordering?<\/h3>\n<p><b>A:<\/b> Use a stable key so related messages go to the same partition; avoid concurrent producers for the same key if strict order is critical; minimize partition count changes.<\/p>\n<\/p><\/div>\n<div class=\"card c-indigo\">\n<h3>47) Q: Hot partition \u2014 what and why?<\/h3>\n<p><b>A:<\/b> When skewed keys route most traffic to a single partition causing imbalance. Fix via better key selection (hash of multiple fields) or custom partitioner; sometimes increase partitions.<\/p>\n<\/p><\/div>\n<div class=\"card c-orange\">\n<h3>48) Q: Common production pitfalls?<\/h3>\n<p><b>A:<\/b> Auto-commit before processing (data loss risk), no schema compatibility, too many small messages (overhead), ignoring lag\/URP alerts, insufficient partitions for growth.<\/p>\n<\/p><\/div>\n<div class=\"card c-lime\">\n<h3>49) Q: Multi-region replication strategies?<\/h3>\n<p><b>A:<\/b> Active-active (bidirectional with conflict strategy) for read locality; active-passive for simpler DR. Use cluster replication tools, filter topics by need, and test failover regularly.<\/p>\n<\/p><\/div>\n<div class=\"card c-emerald\">\n<h3>50) Q: Quick design for payments pipeline?<\/h3>\n<p><b>A:<\/b> <i>Topics:<\/i> <code>payments.in<\/code> (validated events), <code>payments.auth<\/code>, <code>payments.settlement<\/code>, <code>payments.DLQ<\/code>. <i>Keys:<\/i> customer\/account id. <i>Semantics:<\/i> idempotent + transactional producer for EOS. <i>Schema:<\/i> Avro with Registry (backward). <i>Ops:<\/i> RF=3, acks=all, lag\/URP monitoring, compaction for <code>account.state<\/code> changelog.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Apache Kafka Pocket Book \u2014 Uplatz 50 Expanded Cards \u2022 One-Column Colorful Layout \u2022 Fundamentals \u00b7 Ops \u00b7 Dev \u00b7 Streams \u00b7 Connect \u00b7 Security \u00b7 20 Interview Q&amp;A 1) <span class=\"readmore\"><a href=\"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/\">Read More &#8230;<\/a><\/span><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2490,2462],"tags":[],"class_list":["post-4519","post","type-post","status-publish","format-standard","hentry","category-apache-kafka","category-pocket-book"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Apache Kafka Pocket Book | Uplatz Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Apache Kafka Pocket Book | Uplatz Blog\" \/>\n<meta property=\"og:description\" content=\"Apache Kafka Pocket Book \u2014 Uplatz 50 Expanded Cards \u2022 One-Column Colorful Layout \u2022 Fundamentals \u00b7 Ops \u00b7 Dev \u00b7 Streams \u00b7 Connect \u00b7 Security \u00b7 20 Interview Q&amp;A 1) Read More ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/\" \/>\n<meta property=\"og:site_name\" content=\"Uplatz Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Uplatz-1077816825610769\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-10T22:39:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-10T22:52:26+00:00\" \/>\n<meta name=\"author\" content=\"uplatzblog\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@uplatz_global\" \/>\n<meta name=\"twitter:site\" content=\"@uplatz_global\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"uplatzblog\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/apache-kafka-pocket-book\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/apache-kafka-pocket-book\\\/\"},\"author\":{\"name\":\"uplatzblog\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#\\\/schema\\\/person\\\/8ecae69a21d0757bdb2f776e67d2645e\"},\"headline\":\"Apache Kafka Pocket Book\",\"datePublished\":\"2025-08-10T22:39:13+00:00\",\"dateModified\":\"2025-08-10T22:52:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/apache-kafka-pocket-book\\\/\"},\"wordCount\":1294,\"publisher\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#organization\"},\"articleSection\":[\"Apache Kafka\",\"Pocket Book\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/apache-kafka-pocket-book\\\/\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/apache-kafka-pocket-book\\\/\",\"name\":\"Apache Kafka Pocket Book | Uplatz Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#website\"},\"datePublished\":\"2025-08-10T22:39:13+00:00\",\"dateModified\":\"2025-08-10T22:52:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/apache-kafka-pocket-book\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/uplatz.com\\\/blog\\\/apache-kafka-pocket-book\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/apache-kafka-pocket-book\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apache Kafka Pocket Book\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/\",\"name\":\"Uplatz Blog\",\"description\":\"Uplatz is a global IT Training &amp; Consulting company\",\"publisher\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#organization\",\"name\":\"uplatz.com\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/Uplatz-Logo-Copy-2.png\",\"contentUrl\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/Uplatz-Logo-Copy-2.png\",\"width\":1280,\"height\":800,\"caption\":\"uplatz.com\"},\"image\":{\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Uplatz-1077816825610769\\\/\",\"https:\\\/\\\/x.com\\\/uplatz_global\",\"https:\\\/\\\/www.instagram.com\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/7956715?trk=tyah&amp;amp;amp;amp;trkInfo=clickedVertical:company,clickedEntityId:7956715,idx:1-1-1,tarId:1464353969447,tas:uplatz\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/uplatz.com\\\/blog\\\/#\\\/schema\\\/person\\\/8ecae69a21d0757bdb2f776e67d2645e\",\"name\":\"uplatzblog\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g\",\"caption\":\"uplatzblog\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Apache Kafka Pocket Book | Uplatz Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/","og_locale":"en_US","og_type":"article","og_title":"Apache Kafka Pocket Book | Uplatz Blog","og_description":"Apache Kafka Pocket Book \u2014 Uplatz 50 Expanded Cards \u2022 One-Column Colorful Layout \u2022 Fundamentals \u00b7 Ops \u00b7 Dev \u00b7 Streams \u00b7 Connect \u00b7 Security \u00b7 20 Interview Q&amp;A 1) Read More ...","og_url":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/","og_site_name":"Uplatz Blog","article_publisher":"https:\/\/www.facebook.com\/Uplatz-1077816825610769\/","article_published_time":"2025-08-10T22:39:13+00:00","article_modified_time":"2025-08-10T22:52:26+00:00","author":"uplatzblog","twitter_card":"summary_large_image","twitter_creator":"@uplatz_global","twitter_site":"@uplatz_global","twitter_misc":{"Written by":"uplatzblog","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/#article","isPartOf":{"@id":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/"},"author":{"name":"uplatzblog","@id":"https:\/\/uplatz.com\/blog\/#\/schema\/person\/8ecae69a21d0757bdb2f776e67d2645e"},"headline":"Apache Kafka Pocket Book","datePublished":"2025-08-10T22:39:13+00:00","dateModified":"2025-08-10T22:52:26+00:00","mainEntityOfPage":{"@id":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/"},"wordCount":1294,"publisher":{"@id":"https:\/\/uplatz.com\/blog\/#organization"},"articleSection":["Apache Kafka","Pocket Book"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/","url":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/","name":"Apache Kafka Pocket Book | Uplatz Blog","isPartOf":{"@id":"https:\/\/uplatz.com\/blog\/#website"},"datePublished":"2025-08-10T22:39:13+00:00","dateModified":"2025-08-10T22:52:26+00:00","breadcrumb":{"@id":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/uplatz.com\/blog\/apache-kafka-pocket-book\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/uplatz.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Apache Kafka Pocket Book"}]},{"@type":"WebSite","@id":"https:\/\/uplatz.com\/blog\/#website","url":"https:\/\/uplatz.com\/blog\/","name":"Uplatz Blog","description":"Uplatz is a global IT Training &amp; Consulting company","publisher":{"@id":"https:\/\/uplatz.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/uplatz.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/uplatz.com\/blog\/#organization","name":"uplatz.com","url":"https:\/\/uplatz.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/uplatz.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2016\/11\/Uplatz-Logo-Copy-2.png","contentUrl":"https:\/\/uplatz.com\/blog\/wp-content\/uploads\/2016\/11\/Uplatz-Logo-Copy-2.png","width":1280,"height":800,"caption":"uplatz.com"},"image":{"@id":"https:\/\/uplatz.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Uplatz-1077816825610769\/","https:\/\/x.com\/uplatz_global","https:\/\/www.instagram.com\/","https:\/\/www.linkedin.com\/company\/7956715?trk=tyah&amp;amp;amp;amp;trkInfo=clickedVertical:company,clickedEntityId:7956715,idx:1-1-1,tarId:1464353969447,tas:uplatz"]},{"@type":"Person","@id":"https:\/\/uplatz.com\/blog\/#\/schema\/person\/8ecae69a21d0757bdb2f776e67d2645e","name":"uplatzblog","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7f814c72279199f59ded4418a8653ad15f5f8904ac75e025a4e2abe24d58fa5d?s=96&d=mm&r=g","caption":"uplatzblog"}}]}},"_links":{"self":[{"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/posts\/4519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/comments?post=4519"}],"version-history":[{"count":2,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/posts\/4519\/revisions"}],"predecessor-version":[{"id":4523,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/posts\/4519\/revisions\/4523"}],"wp:attachment":[{"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/media?parent=4519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/categories?post=4519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/uplatz.com\/blog\/wp-json\/wp\/v2\/tags?post=4519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}