← 返回首页
Kafka中的生产者和消费者
发表时间:2023-10-28 15:00:13
Kafka中的生产者和消费者

Kafka中的生产者和消费者。

1.生产者与消费者

kafka默认提供了基于控制台的生产者和消费者,方便测试使用。

下来我们看一下如何向里面生产数据。直接使用kafka提供的基于控制台的生产者。

先创建一个topic(5个分区,2个副本):

[root@master ~]# cd $KAFKA_HOME
[root@master kafka]# bin/kafka-topics.sh --create --zookeeper master:2181  --partitions 5 --replication-factor 2 --topic mytopic
Created topic mytopic.

向这个topic中生产数据,broker-list:kafka的服务地址[多个用逗号隔开]、topic:topic的名称。

[root@master kafka_2.12-2.4.1]# bin/kafka-console-producer.sh --broker-list master:9092 --topic mytopic
>hello

下面来创建一个消费者消费topic中的数据,bootstrap-server:kafka的服务地址,topic:具体的topic名字

[root@slave1 kafka_2.12-2.4.1]# bin/kafka-console-consumer.sh --bootstrap-server master:9092 --topic mytopic 

我们发现消费不到刚才生产的数据,为什么呢?因为kafka的消费者默认是消费最新生产的数据,如果想消费之前生产的数据需要添加一个参数–from-beginning,表示从头消费的意思。

[root@slave1 kafka_2.12-2.4.1]# bin/kafka-console-consumer.sh --bootstrap-server master:9092 --topic mytopic --from-beginning
hello

2.QQ群聊天案例

通过kafka可以模拟QQ群聊天的群发功能。

首先在kafka中创建一个新的topic,可以认为是我们在QQ里面创建了一个群,群号是88888888。

[root@master kafka_2.12-2.4.1]# bin/kafka-topics.sh --create --zookeeper master:2181  --partitions 5 --replication-factor 2 --topic 88888888
Created topic 88888888.

然后我把slave1和slave2都拉到这个群里面,这样我在群里面发消息它们就都能收到了。在slave1和slave2上开启消费者,可以认为是把这两个人拉到群里面了。

[root@slave1 kafka_2.12-2.4.1]# bin/kafka-console-consumer.sh --bootstrap-server master:9092 --topic 88888888

然后我在master上开启生产者发消息,这样slave1和slave2都是可以收到的。这样就可以认为在群里的人都能收到我发的消息,类似于QQ的群发消息。


#master主机发生消息
[root@master kafka]# bin/kafka-console-producer.sh --broker-list master:9092 --topic 88888888

>hello,welcome to linux world!
>

#slave1消费者
[root@slave1 kafka]# bin/kafka-console-consumer.sh --bootstrap-server master:9092 --topic 88888888
hello,welcome to linux world!

#slave2消费者
[root@slave2 kafka]# bin/kafka-console-consumer.sh --bootstrap-server master:9092 --topic 88888888
hello,welcome to linux world!

这个其实主要利用了kafka中的多消费者的特性,每个消费者都可以消费到相同的数据。