消息队列之--Kafak

序言

消息丢失如何解决?

解耦

异步

并行

Docker安装Kafak

1.下载镜像

# zookeeper镜像
docker pull wurstmeister/zookeeper
# kafka镜像
docker pull wurstmeister/kafka
# kafka管理镜像
docker pull sheepkiller/kafka-manager

2.运行容器

启动zookeeper

docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper

查看zookeeper启动日志

docker logs -f zookeeper 

安装kafka

docker run -d --name kafka 
--env KAFKA_ADVERTISED_HOST_NAME=localhost 
--env KAFKA_ZOOKEEPER_CONNECT=192.168.229.129:2181 
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.229.129:9092 
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms128M" 
--net=host wurstmeister/kafka

查看kafka启动日志

docker logs -f kafka

验证:
进入kafka容器

docker exec -it kafka /bin/bash
# 进入kafka的bin目录
cd /opt/kafka_2.12-2.2.0/bin/

新建一个test主题,并以生产者身份进行消息生产

./kafka-topics.sh --create --zookeeper 192.168.229.129:2181 --replication-factor 1 --partitions 1 --topic test
./kafka-console-producer.sh --broker-list 192.168.229.129:9092 --topic test
>hello # 发送一条消息并回车
>world

打开一个新的ssh连接,同样进入kafka容器,模拟消费者接收消息

docker exec -it kafka /bin/bash
# 进入kafka的bin目录
cd /opt/kafka_2.12-2.2.0/bin/
# 以消费者身份接收消息
./kafka-console-consumer.sh --bootstrap-server 192.168.229.129:9092 --topic test --from-beginning
hello # 成功接收到消息
world

不断在生产者端发送消息,消费者端可以不断的接收到消息。kafka安装成功!

同样,在zookeeper可视化工具,刷新后可以看到kafka的相关数据节点:

安装kafkamanager

docker run -d --name kafka-manager -e ZK_HOSTS="192.168.229.129:2181" --net=host sheepkiller/kafka-manager
firewall-cmd --add-port=9000/tcp

http://192.168.229.1:9001

点对点模式

Kafka 是支持消费者群组的,也就是说 Kafka 中会有一个或者多个消费者,如果一个生产者生产的消息由一个消费者进行消费的话,那么这种模式就是点对点模式

发布订阅模式

如果一个生产者或者多个生产者产生的消息能够被多个消费者同时消费的情况,这样的消息队列成为发布订阅模式的消息队列

 

资料

http://www.tracefact.net/tech/058.html

http://kafka.apache.org/

https://www.cnblogs.com/cxuanBlog/p/11949238.html

https://www.jianshu.com/p/e642793cd5de

原文地址:https://www.cnblogs.com/cnki/p/11823852.html