Kafka中的生产者和消费者。
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
通过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中的多消费者的特性,每个消费者都可以消费到相同的数据。