Mert Özen Further With Every Line

Blog

Mert Özen's blog posts on software development, backend, frontend, and DevOps.

Series
6 posts found #kafka
Observability in Messaging: OpenTelemetry Trace Context, Queue Depth and Consumer Lag
Backend PART 12

Observability in Messaging: OpenTelemetry Trace Context, Queue Depth and Consumer Lag

Listen to RabbitMQ.Client 7's built-in ActivitySource and write the traceparent into Kafka headers yourself with a propagator; an order's journey through the API, RabbitMQ, Billing, Kafka and Notification then shows up as five spans in one trace. MessageId and CorrelationId in the log scope, the messaging.process.duration histogram, cardinality, queue depth and Kafka consumer lag, with real output.

8 Nov 2026 11 min 4
Message Contracts: Serialization, Versioning and Backward Compatibility
Backend PART 06

Message Contracts: Serialization, Versioning and Backward Compatibility

Keep contracts as records separate from domain entities, evolve them only by adding optional fields, turn on RespectRequiredConstructorParameters and RespectNullableAnnotations in System.Text.Json, and carry the version in a type header. Real output: with default settings a rename becomes a 0 TL invoice, a new enum value breaks old consumers, and Schema Registry rejects an incompatible schema with 409.

8 Nov 2026 10 min 5
Kafka in .NET with Confluent.Kafka: Producers, Consumer Groups, Offset Commits and Rebalancing
Backend PART 05

Kafka in .NET with Confluent.Kafka: Producers, Consumer Groups, Offset Commits and Rebalancing

Keep the producer a singleton, use the key for ordering, Acks=All and idempotence, and Flush before dispose; in the consumer set EnableAutoOffsetStore=false, call StoreOffset after processing and write poison messages to a dead-letter topic. Real output: default auto commit skipping a half-processed message, duplicates after kill -9, eager rebalance, KIP-848 and consumer lag.

8 Nov 2026 12 min 4
Getting Started with Message Queues in .NET: RabbitMQ, Azure Service Bus and Kafka Clients, Which One When
Backend PART 01

Getting Started with Message Queues in .NET: RabbitMQ, Azure Service Bus and Kafka Clients, Which One When

RabbitMQ for flexible routing and per-message ack/retry, Azure Service Bus for a managed service on Azure, Kafka for high volume and replay; the series starts with raw clients and moves on to abstractions. The three brokers' models, a practical comparison table, a program sending and reading the same OrderPlaced with three clients, the Docker Compose environment and a note on Amazon SQS/SNS.

8 Nov 2026 11 min 5
Message Ordering and Partitioning: Where Ordering Guarantees Begin and End
Software Architecture PART 05

Message Ordering and Partitioning: Where Ordering Guarantees Begin and End

Brokers don't give a global order; Kafka partition keys, Azure Service Bus sessions, and RabbitMQ single active consumer only give order per key, and consumers should still be order-independent through version checks. Partitioning by OrderId, the hot partition a BookId key creates, keys moving when partitions are added, and the librdkafka versus Java partitioner difference, with real output on Kafka 4.2.

7 Nov 2026 12 min 4
Channels: Point-to-Point Queues, Publish/Subscribe Topics, and Competing Consumers
Software Architecture PART 03

Channels: Point-to-Point Queues, Publish/Subscribe Topics, and Competing Consumers

In a point-to-point channel each message goes to exactly one consumer, in publish/subscribe each subscriber group gets its own copy, and competing consumers scale by sharing a channel. Two adapters publishing the same OrderPlaced to RabbitMQ and Kafka, exchanges/queues/bindings versus topics/partitions/consumer groups, Kafka 4.2 share groups, and choosing between a queue and a log, with real output.

7 Nov 2026 12 min 4
Blog Map