Docker Kafka 消费者列表
Docker 是一个开源的应用容器引擎,可以轻松地创建、部署和运行应用程序。Kafka 是一个分布式的事件流平台,用于处理高容量的实时数据流。在本文中,我们将介绍如何使用 Docker 部署 Kafka,并展示如何使用 Kafka 消费者列表来监控消息消费情况。
Docker 安装 Kafka
首先,我们需要安装 Docker 并启动它。然后,在命令行中运行以下命令来下载和运行 Kafka 镜像:
docker run -d --name kafka -p 9092:9092 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_AUTO_CREATE_TOPICS_ENABLE=false -e KAFKA_LOG_RETENTION_HOURS=1 confluentinc/cp-kafka:latest
这将下载 Kafka 镜像并在本地运行一个 Kafka 容器。我们还需要将 Kafka 容器的端口映射到本地端口,以便我们可以通过本地主机访问 Kafka 服务。
创建 Kafka 主题和生产者
在 Kafka 中,消息被组织成一个或多个主题。我们首先需要创建一个主题,然后创建一个生产者将消息发送到该主题。
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.NewTopic;
import java.util.Collections;
import java.util.Properties;
public class KafkaSetup {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
AdminClient adminClient = AdminClient.create(props);
NewTopic newTopic = new NewTopic("my-topic", 1, (short) 1);
adminClient.createTopics(Collections.singleton(newTopic));
adminClient.close();
}
}
上述代码演示了如何使用 Kafka 客户端 API 创建一个名为 "my-topic" 的主题。
然后,我们可以编写一个简单的生产者来发送消息到 "my-topic" 主题:
import org.apache.kafka.clients.producer.*;
import java.util.Properties;
public class KafkaProducerExample {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key", "Hello, Kafka!");
producer.send(record, new Callback() {
public void onCompletion(RecordMetadata metadata, Exception exception) {
if (exception != null) {
System.err.println("Error producing message: " + exception.getMessage());
} else {
System.out.println("Message sent successfully!");
}
}
});
producer.close();
}
}
以上代码创建了一个 Kafka 生产者,并将一条消息发送到 "my-topic" 主题。我们可以在 Kafka 中创建多个主题,并将消息发送到不同的主题中。
Kafka 消费者列表
Kafka 提供了一种称为 "消费者组" 的机制,可以将多个消费者组织在一起来处理主题中的消息。消费者组中的每个消费者都会消费一部分主题中的消息。我们可以使用 Kafka 消费者列表来查看每个消费者组中的消费者和它们消费的主题。
以下是一个使用 Kafka Java 客户端 API 获取消费者列表的示例代码:
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.ListConsumerGroupsResult;
import org.apache.kafka.clients.consumer.ConsumerGroupListing;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
public class KafkaConsumerList {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
AdminClient adminClient = AdminClient.create(props);
ListConsumerGroupsResult consumerGroups = adminClient.listConsumerGroups();
consumerGroups.all().get().forEach(consumerGroupListing -> {
System.out.println("Consumer Group: " + consumerGroupListing.groupId());
System.out.println("Members:");
try {
adminClient.describeConsumerGroups(Collections.singleton(consumerGroupListing.groupId())).all().get().forEach((groupId, groupDescription) -> {
groupDescription.members().forEach(memberDescription -> {
System.out.println(" - Member ID: " + memberDescription.consumerId());
System.out.println(" Client ID: " + memberDescription.clientId());