1:kafka需要zookeeper管理,所以需要先安装zookeeper。 下载docker pull wurstmeister/zookeeper:latest版本
docker pull wurstmeister/zookeeper
2:启动镜像生成容器
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper
3:下载kafka镜像
docker pull wurstmeister/kafka
4:启动kafka镜像生成容器
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.155.56:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.155.56:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
-e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
-e KAFKA_ZOOKEEPER_CONNECT=192.168.155.56:2181/kafka 配置zookeeper管理kafka的路径192.168.155.56:2181/kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.155.56:9092 把kafka的地址端口注册给zookeeper
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
5:验证kafka是否可以使用
进入容器
docker exec -it kafka /bin/sh
进入路径:/opt/kafka_2.11-2.0.0/bin下
运行kafka生产者发送消息
./kafka-console-producer.sh --broker-list localhost:9092 --topic sun
发送消息
{"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"}
运行kafka消费者接收消息
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sun --from-beginning
-------------------------------------------------------------------关键总结------------------------------------------------------------------------
1:进入zookeeper容器内,可以看到kafka注册信息
docker exec -it zookeeper /bin/sh
进入bin目录
运行zkCli.sh进入zookeeper客户端
./zkCli.sh
ls / 可以查看zookeeper根节点下都挂了那些目录
可以看到我注册的kafka目录,运行
ls /kafka/brokers/topics/sun/partitions
可以看到我建立的topic叫sun主题的partitions信息
get命令会显示该节点的节点数据内容和属性信息
get /kafka/brokers/topics/sun
ls2命令会显示该节点的子节点信息和属性信息
ls2 /kafka/brokers/topics/sun
通过命令行创建topic和partitions
kafka-topics.sh --create --zookeeper 192.168.155.56:2181/kafka --topic topic-test1 --replication-factor 1 --partitions 2
当创建的replication-factor=2时,因为zookeeper的zoo.cfg配置文件中tickTime=2000会报链接超时,把这个值调大一些,重启zookeeper,再创建topic正常。
删除topic 使用命令:
若 delete.topic.enable=true
直接彻底删除该 Topic。
若 delete.topic.enable=false
如果当前 Topic 没有使用过即没有传输过信息:可以彻底删除。
如果当前 Topic 有使用过即有过传输过信息:并没有真正删除 Topic 只是把这个 Topic 标记为删除(marked for deletion),重启 Kafka Server 后删除。
我的kafka版本是最新的,在service.config文件中是找不到delete.topic.enable=true,系统默认是true.
进入kafka容器,cd opt/kafka/bin
kafka-topics.sh --delete --zookeeper 192.168.155.56:2181/kafka --topic sun
命令可以删除容器中的topic数据,还有zookeeper中的topic目录。
可以在zookeeper中查看目录是否已经删除掉了
进入zookeeper容器,在bin下运行./zkCli.sh
ls /kafka/brokers/topics
还有一种暴力删除方法,因为我启动kafka容器的时候,没有外挂topic路径。所以我直接把容器删除掉,再重新启动一个新的容器也能实现topic的删除。(这种方式不推荐用)
docker kafka 数据文件保存的路径:
在配置文件service.config中配置的,log.dirs配置保存路径。
进入kafka容器,找到配置文件路径/opt/kafka_2.11-2.0.0/config
vi service.config
默认配置在/kafka/kafka-logs-4eaa3ff7f59d下