We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Kafka for .NET Developers - Ian Cooper - NDC Oslo 2024
Learn the fundamentals of Apache Kafka for .NET developers, covering core concepts, reliability patterns, the Confluent client SDK, and essential tools in the ecosystem.
-
Kafka is a distributed, append-only log system originally created at LinkedIn for data lake ingestion, now widely used for messaging and event streaming
-
Messages in Kafka are organized into topics with partitions, where:
- Each partition has a leader and followers for redundancy
- Messages are immutable once written
- Ordering is only guaranteed within a single partition
-
Key concepts for producers:
- Messages consist of a key and value
- Producer writes are asynchronous by default
- Need to call flush() to ensure messages are sent
- Can control delivery guarantees with acks setting (leader-only vs all replicas)
-
Consumer patterns:
- Consumers operate in consumer groups to scale processing
- Each partition can only be read by one consumer in a group
- Consumers track their position using offsets
- Single-threaded to preserve ordering
-
Schema management:
- Schema Registry provides centralized schema storage
- Supports Avro, Protobuf and JSON Schema formats
- Handles schema evolution and compatibility
- First 5 bytes of message contain schema metadata
-
Reliability considerations:
- Manual vs auto commit of offsets
- Delivery reports for producer acknowledgements
- Idempotent producers to prevent duplicates
- Outbox pattern for reliable integration
-
.NET specific details:
- Confluent .NET client is the main SDK
- Async/await support throughout
- SerDes handle serialization/deserialization
- Message pump pattern for consuming
-
Ecosystem includes many tools:
- Kafka Connect for integrations
- KSQL for stream processing
- UI tools for management
- ZooKeeper being replaced by KRaft