WA3204
Introduction to Kafka for C# Developers Training
Kafka is an open-source distributed event-streaming platform used for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications. This four-day class will introduce students to Kafka’s capabilities using .NET Core, through lecture, labs, and a hands-on project the final day.
Course Details
Duration
4 days
Prerequisites
- Basic understanding of messaging, cloud, development, architecture and virtualization is beneficial.
- Experience in .NET with C# is highly recommended as the majority of the labs, and the course project uses .NET Core
Target Audience
- .NET/C# Developers
- Architects
- System Integrators
- Security Administrators
- Network Administrators
- Software Engineers
- Technical Support Individuals
- Technology Leaders and Managers
- Consultants who are responsible for elements of messaging for data collection, transformation, and integration for your organization.
Skills Gained
- Understand the use of Kafka for high performance messaging
- Identify the usages for Kafka in Microservices
- Explain the benefits of Kafka patterns
- Differentiate between messaging and message brokers
- Describe Kafka messaging environments
- Develop producers and consumers for Kafka
- Recognize how Kafka enables Cloud-native applications
- Summarize characteristics and architecture for Kafka
- Demonstrate how to process and consume messages from Kafka using .NET Core Web API, MVC, and Worker (BackgroundService)
- Demonstrate Kafka's role in the end-to-end project involving .NET MVC frontend, .NET Web API backend, .NET Worker, Azure SQL database, and Redis cache.
- Design distributed high throughput systems based on Kafka
- Describe the built-in partitioning, replication and inherent fault-tolerance of Kafka
Course Outline
- Introduction to Kafka
- Messaging Architectures – What is Messaging?
- Messaging Architectures – Steps to Messaging
- Messaging Architectures – Messaging Models
- What is Kafka?
- Kafka Overview
- Need for Kafka
- When to Use Kafka?
- Kafka Architecture
- Core concepts in Kafka
- Kafka Topic
- Kafka Partitions
- Kafka Producer
- Kafka Consumer
- Kafka Broker
- Kafka Cluster
- Why Kafka Cluster?
- Sample Multi-Broker Cluster
- Overview of ZooKeeper
- Kafka Cluster & ZooKeeper
- Schema Registry
- Who Uses Kafka?
- The Inner Workings of Apache Kafka
- A Kafka Cluster High-Level Interaction Diagram
- Topics & Partitions
- The Terms Event/Message/Record
- Message Offset
- Message Retention Settings
- Deleting Messages
- The Flush Policies
- Writing to Partitions
- Batches
- Batch Compression
- Partitions as a Unit of Parallelism
- Message Ordering
- Kafka Default Partitioner
- The Load Balancing Aspect
- Kafka Message Production Schematics
- ZooKeeper
- Reading from a Topic
- Consumer Lag
- Consumer Group
- Consumer Group Diagram
- The Broker
- Broker Hardware Consideration
- OS and File System
- The Leader and Followers Pattern
- Partition Replication Diagram
- Controlled Shutdown
- Controlling Message Durability with Minimum In-Sync Replicas
- Log Compaction
- Frequent Operational Problems
- Some Kafka Design FAQs
- Using Apache Kafka
- What is Confluent?
- Confluent Cloud
- Confluent Cloud Resource Hierarchy
- Setting up Confluent Cloud on Azure
- Setting up Confluent Cloud using Confluent.io
- Select the Confluent Cloud Cluster Type
- Choose the Cloud Provider
- Setting up Confluent Cloud using Azure Marketplace
- Select Confluent Cloud in Azure Marketplace
- Purchase Confluent Cloud
- The Cluster View
- Exploring the Confluent Cloud Console
- Topics
- Topics Advanced Settings
- Searching for Messages in a Topic
- The Confluent CLI
- Kafka Cluster Planning
- Kafka Cluster Planning – Producer/Consumer Throughput
- Kafka Cluster Planning – Sizing for Topics and Partitions
- Managing Topics in Confluent Cloud Console
- Editing an Existing Topic
- Delete a Topic
- Kafka and .NET
- .NET Kafka Architectures
- Packages
- Installing the Packages
- Navigating .NET Client Documentation
- Important Classes and Interfaces
- appsettings.json Kafka Configuration
- Loading the Configuration from appsettings.json
- Produce and ProduceAsync Methods
- Produce vs ProduceAsync
- Error Handling
- Consuming Messages
- Creating and Deleting Topics
- Copying Data from Between Environments
- Mocking Datasets using Datagen Connector
- Monitoring Confluent Cloud
- Monitoring Confluent Cloud using cURL
- Motoring Confluent Cloud using third-party Tools
- Building Data Pipelines
- Building Data Pipelines
- What to Consider When Building Data Pipelines
- Timeliness
- Reliability
- High and Varying Throughput
- Evolving Schema
- Data Formats
- Protobuf (Protocol Buffers) Overview
- Avro Overview
- Managing Data Evolution Using Schemas
- Confluent Schema Registry
- Confluent Schema Registry in a Nutshell
- Schema Management on Confluent Cloud
- Create a Schema
- Create a Schema using Confluent CLI
- Create a Schema from the Web UI
- Schema Change and Backward Compatibility
- Collaborating over Schema Change
- Handling Unreadable Messages
- Deleting Data
- Segregating Public and Private Topics
- Transformations
- Transformations - ELT
- Security
- Failure Handling
- Agility and Coupling
- Ad-hoc Pipelines
- Metadata Loss
- Extreme Processing
- Kafka Connect vs. Producer and Consumer
- Integrating Kafka with Other Systems
- Introduction to Kafka Integration
- Kafka Connect
- Running Kafka Connect Operating Modes
- Key Configurations for Connect workers:
- Kafka Connect API
- Kafka Security
- Kafka Security
- Encryption and Authentication using SSL
- Configuring Kafka Brokers
- Configuring Kafka Brokers – Optional Settings
- Authenticating Using SASL
- Authenticating Using SASL – Configuring Kafka Brokers
- Authorization and ACLs
- Securing a Running Cluster
- ZooKeeper Authentication
- Monitoring Kafka
- Introduction
- Metrics Basics
- JVM Monitoring
- Garbage collection
- Java OS monitoring
- OS Monitoring
- Kafka Broker Metrics
- Under-Replicated Partitions
- Active controller count
- Request handler idle ratio
- Intelligent Thread Usage
- All topics bytes in
- All topics bytes out
- All topics messages in
- Partition count
- Leader count
- Offline partitions
- Request metrics
- Logging
- Client Monitoring
- Producer Metrics
- Overall producer metrics
- Per-broker and per-topic metrics
- Consumer Metrics
- Fetch Manager Metrics
- Per-broker and per-topic metrics
- Consumer coordinator metrics
- Quotas
- Lag Monitoring
- End-to-End Monitoring
- Apache Kafka Best Practices
- Best Practices for Working with Partitions
- Best Practices for Working with Consumers
- Best Practices for Working with Producers
- Best Practices for Working with Brokers
- Lab Exercises
- Lab 1 - Signing Up for the Free Trial of Confluent Cloud
- Lab 2 - Understanding Confluent Cloud Clusters
- Lab 3 - Understanding Confluent Cloud CLI
- Lab 4 - Understanding Kafka Topics
- Lab 5 - Using the Confluent CLI to Consume Messages
- Lab 6 - Creating an ASP.NET Core MVC Kafka Client
- Lab 7 - Creating an ASP.NET Core Web API Kafka Client
- Lab 8 - Creating a .NET Core 3.1 Worker Kafka Client
- Lab 9 - Integrating Azure SQL and Kafka
- Lab 10 - Integrating Redis cache with .NET Core 3.1 ASP.NET MVC Lab
- The Final Project