Azure Event Hubs Tutorials

Unlock the power of real-time data streaming.

Language:

Kafka Integration with Azure Event Hubs

1. Introduction

Azure Event Hubs is a fully managed, real-time data streaming service that can handle millions of events per second. Kafka is a popular open-source distributed event streaming platform. This tutorial demonstrates how to integrate Azure Event Hubs with Kafka, allowing you to leverage the capabilities of both services.

By using the Event Hubs for Kafka connector, you can treat your Event Hubs namespace as a Kafka broker, enabling existing Kafka applications and libraries to seamlessly send and receive data from Event Hubs without significant code changes.

2. Prerequisites

  • An active Azure subscription.
  • An existing Kafka cluster or a local Kafka installation.
  • Apache Kafka client libraries and tools installed.
  • Basic understanding of Kafka concepts (topics, producers, consumers).

3. Set up Azure Event Hubs

First, you need to provision an Azure Event Hubs namespace and create an Event Hub within it.

  1. Navigate to the Azure portal.
  2. Search for "Event Hubs" and click "Create".
  3. Select your subscription, resource group, and provide a name for your Event Hubs namespace. Choose a region and pricing tier.
  4. Click "Review + create" and then "Create".
  5. Once the namespace is deployed, navigate to it.
  6. Under "Entities", click "Event Hubs" and then "Add".
  7. Enter a name for your Event Hub (e.g., kafkatopic) and click "Create".
Note: You will need the Primary Connection String for your Event Hubs namespace to configure the Kafka connector. You can find this under "Shared access policies" in your Event Hubs namespace.

Obtain Connection Details

From the Azure portal, go to your Event Hubs namespace, navigate to "Shared access policies", select "RootManageSharedAccess" (or create a new policy with listen and send permissions), and copy the Connection string—primary key.

You also need the Bootstrap Servers endpoint for Event Hubs. This follows the format: .servicebus.windows.net:9093. If you are using Kafka's SASL/Plain authentication, you'll also need the SASL JAAS config.

4. Configure Kafka Connector

To connect Kafka to Event Hubs, you'll use the Event Hubs Kafka connector. This connector is available as part of the Azure Event Hubs for Apache Kafka client library.

Using the Event Hubs Kafka Connector

The Event Hubs Kafka connector replaces the default Kafka broker endpoints with Event Hubs specific ones. You'll typically configure this in your Kafka producer and consumer properties files.

Producer Configuration Example (producer.properties):


bootstrap.servers=<your-namespace-name>.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="<your_event_hubs_connection_string>";
# If using a specific event hub name
# eventhubs.fullyQualifiedNamespace=<your-namespace-name>.servicebus.windows.net
# eventhubs.entityPath=kafkatopic
                

Consumer Configuration Example (consumer.properties):


bootstrap.servers=<your-namespace-name>.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="<your_event_hubs_connection_string>";
group.id=my-kafka-group
auto.offset.reset=earliest
# If using a specific event hub name
# eventhubs.fullyQualifiedNamespace=<your-namespace-name>.servicebus.windows.net
# eventhubs.entityPath=kafkatopic
                

Key Configuration Parameters:

  • bootstrap.servers: The Event Hubs endpoint.
  • security.protocol: Set to SASL_SSL for secure communication.
  • sasl.mechanism: Set to PLAIN.
  • sasl.jaas.config: The connection string details for authentication.
  • eventhubs.fullyQualifiedNamespace (optional): If not specified, the connector infers it from the bootstrap.servers.
  • eventhubs.entityPath (optional): If you want to target a specific Event Hub. If omitted, the connector will likely default to a topic named "eventhubs" or require a default configuration on the Event Hubs namespace.
Security: Never hardcode connection strings in production code. Use secure methods like Azure Key Vault or environment variables.

5. Test the Integration

Now, let's test sending messages to Event Hubs using a Kafka producer and consuming them with a Kafka consumer.

Sending Messages

Use the Kafka command-line tools or a custom producer application configured with the properties above.


kafka-console-producer.sh --broker-list <your-namespace-name>.servicebus.windows.net:9093 --topic kafkatopic --producer.config producer.properties
                

Type messages in the console and press Enter to send them.

Receiving Messages

Use the Kafka command-line tools or a custom consumer application configured with the properties above.


kafka-console-consumer.sh --bootstrap-server <your-namespace-name>.servicebus.windows.net:9093 --topic kafkatopic --consumer.config consumer.properties
                

You should see the messages you sent via the producer appear in the consumer console.

6. Conclusion

Congratulations! You have successfully integrated Apache Kafka with Azure Event Hubs. This allows you to seamlessly migrate or extend your Kafka-based applications to Azure's managed streaming service, benefiting from its scalability, reliability, and global reach.

Explore further by integrating Event Hubs with other Azure services like Azure Stream Analytics, Azure Databricks, or Azure Functions for advanced real-time data processing and analytics.