1.什么是kafka?
1.1)kafka主要用于大数据实时数据处理领域,是一个基于发布订阅模式的消息队列
1.2)消息队列有两种模式:点对点模式、发布订阅模式
1.2.1)点对点模式(一对一):生产者生产消息发送到队列,消费者主动到队列中取并消费,消费后的消息将从队列中移除,这样可以避免一个消息被重复消费,队列支持多个消费者存在,但是一个消息只能被一个消费者消费。
1.2.1)发布订阅模式(一对多):生产者将消息发送到topic,多个消费者订阅并消费,topic是用于消息分类的。发布订阅有两种模式:
消息队列主动向消费者推送:这种存在推送量与消费量不成正比时会导致消费者崩溃,假如队列按照每秒50条推送,消费者按照每秒10条消费,这就会出问题。
消费者主动向消息队列拉取:这种需要消费者维护一个长轮询获取消息,还可以使用一个队列来存放订阅该topic的所有消费者,有消息就通知消费者来消费,这种如果消费者挂了就收不到了。
2.安装:
首先需要安装zookeeper
docker pull wurstmeister/zookeeper
安装kafka
docker pull wurstmeister/kafka
启动zookeeper
docker run -d --name zookeeper -p 2181:2181 -e TZ="Asia/Shanghai" --restart always wurstmeister/zookeeper
参数介绍:
--name:容器名字
-p:端口号(映射到宿主机的端口:zookeeper端口号)
启动kafka
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=<这里换成你的zookeeper地址和端口> -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<这里换成你的kafka地址和端口> -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e TZ="Asia/Shanghai" wurstmeister/kafka
参数介绍:
--name:容器名字
-p:端口号
KAFKA_BROKER_ID:该ID是集群的唯一标识
KAFKA_ADVERTISED_LISTENERS:kafka发布到zookeeper供客户端使用的服务地址。
KAFKA_ZOOKEEPER_CONNECT:zk的连接地址
KAFKA_LISTENERS:允许使用PLAINTEXT侦听器
3.使用kafka:
进入kafka容器内部
docker exec -it kafka /bin/sh
进入路径:/opt/kafka_2.13-2.7.0/bin下
通过生产者向topic发送消息
./kafka-console-producer.sh --broker-list kafka地址:访问kafka的端口号 --topic jbjb(topic名)
另外打开一个窗口 消费者消费消息
kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic jbjb --from-beginning