Cheat Sheets

Three dense quick references by persona—producer/consumer/Spring for developers, Streams/Connect/schemas for data engineers, and ops/metrics/security for platform. Use Copy sheet for plain text, persona filters to focus one role, or print (Cmd/Ctrl+P).

developer senior platform

Developer Cheat Sheet

Producer/consumer config, delivery semantics, Spring Kafka. Chapters: Producers, Consumers, Spring Kafka.

developer

Delivery semantics

SemanticProducerConsumerWhen
At-most-onceacks=0, no retryCommit before processMetrics, loss OK
At-least-onceacks=all, retriesProcess then commitDefault production
Exactly-once (Kafka)Idempotent + transactionsread_committedStreams, txn listeners
# Durable producer (at-least-once on wire)
acks=all
enable.idempotence=true
retries=2147483647
max.in.flight.requests.per.connection=5

Producer config

PropertySafe prodThroughputLow latency
acksall11
linger.ms5200
batch.size1638413107216384
compression.typelz4lz4none
buffer.memory33554432134217728
enable.idempotencetruetruetrue
// Async — never .get() per record in hot loop
kafkaTemplate.send("orders", key, event);  // CompletableFuture in Spring Kafka 3.x

Consumer config

PropertyTypicalNotes
group.idorder-serviceOne per logical app
auto.offset.resetearliestNew group only
enable.auto.commitfalseManual ack after process
max.poll.records500× process time < max.poll.interval.ms
max.poll.interval.ms300000+Rebalance if exceeded
isolation.levelread_committedTransactional producers
fetch.min.bytes1 / 100000Latency / throughput

Spring Kafka

APIPurpose
KafkaTemplate.send(...)Async produce; returns CompletableFuture
@KafkaListenerDeclarative consumer; containerFactory for custom ack/error
AcknowledgmentManual commit — needs MANUAL ackMode
@SendToRequest-reply reply routing
DefaultErrorHandlerRetry + DLT via DeadLetterPublishingRecoverer
@RetryableTopicNon-blocking retry topics + DLT
ReplyingKafkaTemplateRPC-style request-reply client
@KafkaListener(topics = "orders", groupId = "processor")
public void onOrder(@Payload OrderEvent o, Acknowledgment ack) {
  process(o);
  ack.acknowledge();
}

spring.kafka.listener.ack-mode: record
spring.kafka.listener.concurrency: 3

Partitioning & keys

StrategyBehavior
Key providedmurmur2(key) % partitions — same key → same partition
No key, partition setExplicit partition
No key, no partitionSticky partition batching (producer)
CustomPartitioner implementation

CLI quick ref

kafka-console-producer.sh --bootstrap-server kafka:9092 --topic orders
kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic orders --from-beginning --group debug

kafka-topics.sh --describe --topic orders --bootstrap-server kafka:9092
kafka-consumer-groups.sh --describe --group order-processor --bootstrap-server kafka:9092

Data Engineer Cheat Sheet

Streams, Connect/CDC, Schema Registry, patterns, performance. Chapters: Streams, Connect, Schemas, Patterns.

senior

Kafka Streams DSL

TypeSemanticsBacking topic
KStreamEvent stream (every record)delete retention
KTableChangelog per key (latest)compact
GlobalKTableFull copy on every instanceCompacted, small catalog
streams.builder()
  .stream("orders")
  .groupByKey()
  .windowedBy(TimeWindows.ofSizeWithNoGrace(Duration.ofMinutes(5)))
  .count()
  .toStream()
  .to("order-counts");

# EOS
processing.guarantee=exactly_once_v2
isolation.level=read_committed

Connect & Debezium

ComponentRole
ConnectorPlugin + config (JdbcSource, Debezium, S3Sink)
TaskUnit of parallelism (tasks.max)
WorkerJVM running tasks; REST :8083
SMTSingle Message Transform in-flight
DBCDC mechanism
PostgreSQLLogical replication (pgoutput)
MySQLBinlog ROW format
MongoDBChange streams / oplog
OracleLogMiner
# Debezium envelope fields
op: c|u|d|r   before / after   source.ts_ms   ts_ms

# Outbox SMT
transforms=outbox
transforms.outbox.type=io.debezium.transforms.outbox.EventRouter

# Error handling
errors.tolerance=all
errors.deadletterqueue.topic.name=connect.dlq

Schema Registry

CompatibilityRule (intuition)
BACKWARDNew consumer reads old data — add fields with default
FORWARDOld consumer reads new data — remove with default
FULLBoth directions vs latest version
FULL_TRANSITIVEBoth vs all history — prod default
NONENo checks — avoid shared topics
Wire: 0x00 + schema_id (4 bytes BE) + payload

Subject: orders-value  (TopicNameStrategy)
auto.register.schemas=false   # CI registers schemas

Architecture patterns

PatternUse whenGotcha
Outbox + CDCDB + Kafka atomic publishAt-least-once; idempotent consumers
CQRSSeparate read/write modelsEventual consistency in UX
Event sourcingReplayable audit logSnapshot for long aggregates
Saga orchestrationMulti-service txnCompensations must be idempotent
DLTPoison messages{topic}.DLT + metadata headers
Fan-outMultiple independent consumersSeparate consumer groups
MirrorMaker 2DR / multi-regionActive-active needs conflict rules

Performance tuning matrix

KnobThroughputLow latency
linger.ms200
compression.typelz4none
fetch.min.bytes1000001
fetch.max.wait.ms5000
acks1 (unsafe)1 or all
partitions ≈ target_MB/s ÷ per_partition_MB/s  (measure!)
Per partition: ~10-100 MB/s depending on disk/NIC

kafka-producer-perf-test.sh --topic perf --record-size 1024 --throughput -1 ...
kafka-consumer-perf-test.sh --topic perf --messages 5000000 ...

Reliability checklist

LayerMust have
TopicRF=3, min.insync.replicas=2
Produceracks=all, idempotence
ConsumerIdempotent handler or dedup store
Brokerunclean.leader.election.enable=false
SchemaFULL_TRANSITIVE, no auto-register in prod

Platform / Infra Cheat Sheet

Topic admin, monitoring alerts, security, broker/OS tuning, capacity. Chapters: Operations, Performance, Architecture.

platform

Topic administration

# Create (size partitions up-front — cannot reduce)
kafka-topics.sh --create --topic orders --partitions 24 --replication-factor 3 \
  --config min.insync.replicas=2 --config retention.ms=604800000

kafka-topics.sh --alter --topic orders --partitions 36   # increase only
kafka-configs.sh --alter --entity-type topics --entity-name orders \
  --add-config retention.ms=1209600000

kafka-topics.sh --delete --topic orders-staging   # needs delete.topic.enable
ConfigTypical prod
replication.factor3
min.insync.replicas2
retention.ms7d–30d tiered
cleanup.policydelete / compact / both
segment.bytes1 GB

Consumer group ops

kafka-consumer-groups.sh --list --bootstrap-server kafka:9092
kafka-consumer-groups.sh --describe --group order-processor

# Reset (stop consumers first; dry-run then --execute)
kafka-consumer-groups.sh --group order-processor --topic orders \
  --reset-offsets --to-datetime 2026-06-01T00:00:00.000 --dry-run
# --to-earliest | --to-latest | --to-offset | --by-duration PT2H

Critical metrics — page these

MetricTargetComponent
UnderReplicatedPartitions0Broker
OfflinePartitionsCount0Broker
ActiveControllerCount1 cluster-wideController
RequestHandlerAvgIdlePercent> 0.2Broker
records-lag-maxFlat / boundedConsumer
record-error-rate0Producer
Stack: JMX → Prometheus JMX Exporter → Grafana (Confluent dashboards)
Lag SLA: Burrow (OK/WARN/ERR) or records-lag-max growth rate

Security

LayerMechanism
Encrypt transitSSL/TLS, SASL_SSL listeners
AuthSCRAM-SHA-512 (internal), OAuth/Kerberos (enterprise)
AuthzACLs — StandardAuthorizer (KRaft)
At restOS/disk encryption — not built into Kafka
kafka-acls.sh --add --allow-principal User:order-service \
  --operation Write --topic orders

kafka-acls.sh --add --allow-principal User:processor \
  --operation Read --topic orders
kafka-acls.sh --add --allow-principal User:processor \
  --operation Read --group order-processor

Broker & OS tuning

SettingValue
JVM heap-Xms6g -Xmx6g — rest to page cache
GCG1GC, MaxGCPauseMillis=20
vm.swappiness1
vm.dirty_ratio80
MountXFS/ext4, noatime
num.io.threads2 × data disks
num.network.threads8
unclean.leader.election.enablefalse

Partition reassignment

kafka-reassign-partitions.sh --broker-list 3 --generate
kafka-reassign-partitions.sh --reassignment-json-file plan.json --execute
kafka-reassign-partitions.sh --reassignment-json-file plan.json --verify

# Throttle before execute; remove throttle after verify
leader.replication.throttled.rate=52428800

Capacity formulas

disk ≈ retention_sec × peak_bytes_in × RF × 1.2

network ≈ peak_bytes_in × (RF - 1 + consumer_fan_out)

partitions/broker ceiling: ~2000–4000 (rebalance + metadata cost)

KRaft: dedicated controller quorum; monitor metadata apply latency

KRaft vs ZooKeeper (legacy)

ItemKRaft
Metadata__cluster_metadata quorum
ControllersCombined or dedicated broker role
Ops winNo ZK ensemble to operate
MigrationZK → KRaft one-way (plan maintenance)