1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 rm -rf /home/kafka/ mkdir /home/kafka/ cd /home/kafka cat > docker-compose.yaml <<-'EOF' version: "2" services: zookeeper: image: docker.io/bitnami/zookeeper:3.9 ports: - "2181:2181" environment: - ALLOW_ANONYMOUS_LOGIN=yes kafka: image: docker.io/bitnami/kafka:3.9 .0 hostname: kafka ports: - "9092:9092" environment: - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 depends_on: - zookeeper EOF docker-compose up -d
1 2 firewall-cmd --zone=public --add-port=9092 /tcp --permanent firewall-cmd --reload
创建主题Topic Kafka的主题(Topic)是Kafka中用于分类和发布消息的逻辑通道。它类似于一个消息队列,生产者向特定主题发布消息,消费者则订阅这些主题来接收消息。每个主题可以有多个分区(Partition),以支持并行处理和扩展性。简而言之,Topic是Kafka中消息流转的基本单位和核心概念。
1 2 docker exec -it kafka-kafka-1 /bin/bash /opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server=localhost:9092 --topic=kinaction_helloworld --partitions 1 --replication-factor 1
1 2 WARNING: Due to limitations in metric names, topics with a period ('.' ) or underscore ('_' ) could collide. To avoid issues it is best to use either, but not both. Created topic kinaction_helloworld.
这条命令是用于在Kafka集群中创建一个名为kinaction_helloworld的主题。让我们详细解析一下这个命令的各个部分: ● /opt/bitnami/kafka/bin/kafka-topics.sh:这是Kafka提供的一个脚本,用于管理Kafka的主题,包括创建、列出、删除等操作。 ● –create:标志告诉脚本你想要创建一个新的主题。 ● –bootstrap-server=localhost:9092:指定了Kafka集群的地址和端口,这里是假设Kafka运行在本地,并且使用默认的端口9092。如果你的Kafka集群不在本地或者使用了不同的端口,你需要将这部分替换为实际的地址和端口。 ● –topic=kinaction_helloworld:定义了你想要创建的主题名称,在这个例子中是kinaction_helloworld。 ● –partitions 1:指定了主题中的分区数量。分区是Kafka并行处理消息的基础,每个分区可以被看作是一个有序的消息队列。在这个例子中,我们只创建了一个分区。 ● –replication-factor 1:我为你补全了这一部分,它指定了每个分区的副本因子。副本因子表示每个分区会有多少个副本以确保数据的持久性和故障恢复能力。在这个例子中设置为1意味着没有额外的副本,这在生产环境中可能不够健壮,因为如果该分区所在的Broker失败,那么这部分数据将不可用。在生产环境中,通常会设置一个更高的副本因子(如3)来保证高可用性。 综上所述,该命令完整地执行后,会在本地Kafka集群上创建一个名为kinaction_helloworld的主题,该主题包含1个分区和1个副本。
1 2 /opt/bitnami/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092 kinaction_helloworld
查看主题详细内容 1 2 3 /opt/bitnami/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic kinaction_helloworld Topic: kinaction_helloworld TopicId: 7El5X-HBQre8t9R2H9ec8w PartitionCount: 1 ReplicationFactor: 1 Configs: Topic: kinaction_helloworld Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001
该命令行语句是用于查询Kafka中特定主题(topic)的详细信息。下面是该命令的分解和其输出内容的详细解释:
输出内容解释: 1 Topic: kinaction_helloworld TopicId: 7El5X-HBQre8t9R2H9ec8w PartitionCount: 1 ReplicationFactor: 1 Configs:
● Topic: 表示主题的名称,这里是kinaction_helloworld。 ● TopicId: 是主题的唯一标识符,用于在Kafka内部识别不同的主题,例如7El5X-HBQre8t9R2H9ec8w。 ● PartitionCount: 指出该主题包含的分区数量,这里是1个分区。分区是Kafka并行处理和扩展消息存储的基础。 ● ReplicationFactor: 表示每个分区的副本数,这里也是1,意味着没有数据冗余。在生产环境中,通常会设置更高的副本数以确保高可用性。 ● Configs: 后面没有列出具体的配置项,表明该主题使用的是默认配置。
1 Topic: kinaction_helloworld Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001
● Partition: 指定具体分区的信息,这里是分区0。 ● Leader: 每个分区都有一个领导者副本,负责处理对该分区的所有读写请求。这里分区0的领导者是Broker id为1001的节点。 ● Replicas: 列出了该分区的所有副本节点,这里只有一个副本,也是1001。 ● Isr: 表示“in-sync replicas”(同步副本集),这些副本与领导者保持同步并且被认为是可以立即接替成为领导者的副本。在这个例子中,ISR中也只有1001这一个副本。
1 2 3 4 5 /opt/bitnami/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic kinaction_helloworld >773616 >187271 >8381 >3810018
整个命令的作用是启动Kafka的控制台生产者,连接到本地(localhost)的Kafka服务器,然后开始向名为 kinaction_helloworld 的主题发送消息。用户可以在启动的命令行界面中输入消息内容,每按一次回车,输入的内容就会作为一条消息发送到指定的主题中。这对于测试和演示Kafka消息生产与消费流程非常有用。
1 2 3 4 5 /opt/bitnami/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kinaction_helloworld --from-beginning 773616 187271 8381 3810018
该命令的作用是使用Kafka提供的命令行工具,从本地Kafka服务器上的kinaction_helloworld主题中消费消息,并且是从该主题最开始的消息消费起。这对于测试、调试或初学者了解Kafka消息队列的工作原理非常有用。