1、kafka是什么?
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能、持久化、多副本备份、横向扩展能力。
2、kafka的工作原理[去耦合]
Kafka采用的是订阅-发布的模式,消费者主动的去kafka集群拉取消息,与producer相同的是,消费者在拉取消息的时候也是找leader去拉取。
3、kafka存在的意义:去耦合、异步、中间件的消息系统。
# app-kafka:网络名称
# –driver:网络类型为bridge
docker network create app-kafka --driver bridge
# Kafka依赖zookeeper所以先安装zookeeper
# docker pull bitnami/zookeeper:3.7
# -p:设置映射端口(默认2181)
# -d:后台启动
# zookeeper:3.4.14
docker run -d --name zookeeper-server \
-p 2181:2181 \
--network app-kafka \
-e ALLOW_ANONYMOUS_LOGIN=yes \
bitnami/zookeeper:3.7
docker ps
# 安装并运行Kafka,
# docker pull bitnami/kafka:3.2.0
# –name:容器名称
# -p:设置映射端口(默认9092 )
# -d:后台启动
# ALLOW_PLAINTEXT_LISTENER任何人可以访问
# KAFKA_CFG_ZOOKEEPER_CONNECT链接的zookeeper
# KAFKA_ADVERTISED_HOST_NAME当前主机IP或地址(重点:如果是服务器部署则配服务器IP或域名否则客户端监听消息会报地址错误)
# -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.80.131:9092 这个IP一定要是外网IP,不要设置为内网IP
docker run -d --name kafka-server \
--network app-kafka \
-p 9092:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.80.131:9092 \
bitnami/kafka:3.2.0
docker ps
# kafka-manager 只是一个简单的页面,浏览kafka中的信息,没有实际操作功能。
# -p:设置映射端口(默认9000)
# –name:容器名称
# -ZK_HOSTS:zookeeper服务地址,多个可用逗号隔开
docker run --name kafka-manager -d \
--network app-kafka \
-p 9000:9000 \
-e ZK_HOSTS="zookeeper-server:2181" \
sheepkiller/kafka-manager
查看kafka-manager容器日志(可省略)
docker logs -f kafka-manager
通过浏览器访问主机地址,如果是服务器则注意要放开9000端口
http://172.17.0.6:9000/
# 图形化管理工具
# 访问地址:http://服务器IP:9101/
# DEFAULT_USERNAME:默认账号 admin
# DEFAULT_PASSWORD:默认密码 admin
# Git 地址:https://github.com/dushixiang/kafka-# map/blob/master/README-zh_CN.md
docker run -d --name kafka-map \
--network app-kafka \
-p 9101:8080 \
-v /opt/kafka-map/data:/usr/local/kafka-map/data \
-e DEFAULT_USERNAME=admin \
-e DEFAULT_PASSWORD=admin \
--restart always dushixiang/kafka-map:latest
docker exec -it zookeeper-server /bin/bash
cd /opt/bitnami/zookeeper/bin
./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, feature, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 9]
# 进入kafka容器
docker exec -it kafka-server bash
# 创建主题
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic mytest
# 查看主题
kafka-topics.sh --list --bootstrap-server localhost:9092
# 发送消息
kafka-console-producer.sh --broker-list localhost:9092 --topic mytest
# 接收消息
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytest --from-beginning