Kafka broker
This example demonstrates some basic operations with a Kafka broker proxied through Envoy.
For your convenience, the composition
provides
a dockerized Kafka client.
If you have the kafka-console-*
binaries installed on your host system, you can instead follow
the examples using the host binary with --bootstrap-server localhost:10000
.
Statistics collected by Envoy for the Kafka broker extension and related cluster metrics are also demonstrated.
Step 1: Start all of our containers
Change to the examples/kafka
directory.
$ pwd
envoy/examples/kafka
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------
kafka_kafka-server_1 /etc/confluent/docker/run Up 9092/tcp
kafka_proxy_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10000->10000/tcp, 0.0.0.0:8001->8001/tcp
kafka_zookeeper_1 /etc/confluent/docker/run Up (healthy) 2181/tcp, 2888/tcp, 3888/tcp
Step 2: Create a Kafka topic
Start by creating a Kafka topic with the name envoy-kafka-broker
:
$ export TOPIC="envoy-kafka-broker"
$ docker compose run --rm kafka-client kafka-topics --bootstrap-server proxy:10000 --create --topic $TOPIC
Step 3: Check the Kafka topic
You can view the topics that Kafka is aware of with the kafka-topics --list
argument.
Check that the topic you created exists:
$ docker compose run --rm kafka-client kafka-topics --bootstrap-server proxy:10000 --list | grep $TOPIC
Step 4: Send a message using the Kafka producer
Next, send a message for the topic you have created using the kafka-console-producer
:
$ export MESSAGE="Welcome to Envoy and Kafka broker filter!"
$ docker compose run --rm kafka-client /bin/bash -c " \
echo $MESSAGE \
| kafka-console-producer --request-required-acks 1 --broker-list proxy:10000 --topic $TOPIC"
Step 5: Receive a message using the Kafka consumer
Now you can receive the message using the kafka-console-consumer
:
$ docker compose run --rm kafka-client kafka-console-consumer --bootstrap-server proxy:10000 --topic $TOPIC --from-beginning --max-messages 1 | grep "$MESSAGE"
Step 6: Check admin kafka_broker
stats
When you proxy to the Kafka broker, Envoy records various stats.
You can check the broker stats by querying the Envoy admin interface (the numbers might differ a little as the kafka-client does not expose precise control over its network traffic):
$ curl -s "http://localhost:8001/stats?filter=kafka.kafka_broker" | grep -v ": 0" | grep "_request:"
kafka.kafka_broker.request.api_versions_request: 9
kafka.kafka_broker.request.create_topics_request: 1
kafka.kafka_broker.request.fetch_request: 2
kafka.kafka_broker.request.find_coordinator_request: 8
kafka.kafka_broker.request.join_group_request: 2
kafka.kafka_broker.request.leave_group_request: 1
kafka.kafka_broker.request.list_offsets_request: 1
kafka.kafka_broker.request.metadata_request: 12
kafka.kafka_broker.request.offset_fetch_request: 1
kafka.kafka_broker.request.produce_request: 1
kafka.kafka_broker.request.sync_group_request: 1
Step 7: Check admin kafka_service
cluster stats
Envoy also records cluster stats for the Kafka service:
$ curl -s "http://localhost:8001/stats?filter=cluster.kafka_service" | grep -v ": 0"
cluster.kafka_service.max_host_weight: 1
cluster.kafka_service.membership_healthy: 1
cluster.kafka_service.membership_total: 1
See also
- Envoy Kafka broker filter
Learn more about the Kafka broker filter.
- Kafka
The Apache Kafka.