**

为了方便后续的配置,以下部署的时候IP都统一使用同一个IP

**

首先,先下载两个官方images:

docker pull wurstmeister/kafka
docker pull wurstmeister/zookeeper

不加其他参数默认下载最新的镜像
可以用docker search kafka查询docker hub中可下载的镜像

启动zookeeper容器

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

启动kafka容器

docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=10.147.19.120 -env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka:latest

192.168.59.101 改为宿主机器的IP地址,如果不这么设置,可能会导致在别的机器上访问不到kafka。

创建docker-compose.yml文件

version: '2'
services:zookeeper:image: wurstmeister/zookeeper            #映射的镜像名container_name: zookeeper   #启动的容器名mem_limit: 1024Menvironment:ZOOKEEPER_CLIENT_PORT: 2181KAFKA_HEAP_OPTS: "-Xmx512M -Xms512M"kafka:image: wurstmeister/kafka  #映射的镜像名container_name: kafka        #启动的容器名mem_limit: 1024Mdepends_on:- zookeeperports:                     #让docker之外的网络可以访问- 9092:9092environment:KAFKA_BROKER_NO: 1#KAFKA_ADVERTISED_HOST_NAME: 10.147.19.120        #改成本机IPKAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.147.19.120:9092KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1KAFKA_HEAP_OPTS: "-Xmx1G -Xms128M"KAFKA_LOG_DIRS: "/kafka/KafkaLog"            #更改topic日志存储路径volumes:- /var/run/docker.sock:/var/run/docker.sock #宿主机的/var/run/docker.sock被映射到了容器内#- /mnt/mntnas/KafkaLog:/kafka/KafkaLog  #把磁盘映射进docker- /etc/localtime:/etc/localtime- /opt/kafka_2.12-2.3.0/logs:$PWD/logs- /kafka:$PWD/log.dirs

之后执行

docker-compose up -d

即可启动
接着执行

docker ps

查看容器是否成功启动
若启动失败,使用

docker ps -a 或者 docker ps -l

查看启动失败的容器
使用

docker logs 容器ID

查看具体报错日志

如要进入kafka容器:

docker exec -it 容器ID  /bin/bash

kafka配置文件路径

cd   /opt/kafka_2.12-2.3.0/config
里面有个server.properties文件

若是外网无法访问
可以在server.properties最后增加

advertised.host.name=10.120.11.93  #个人在使用中只配置了这一处,外网即可访问
或者
advertised.listeners=PLAINTEXT://59.64.11.22:9092  #外网IP,方便配置,在部署的时候IP都统一
并在docker-compose.yml中的kafka节点下增加```yamlports:  # 增加- 9092:9092  # 增加

若要删除TOPIC立即生效,在server.properties文件最后追加

delete.topic.enable=true

linux中kafka常用命令

查看topic列表
kafka-topics.sh --list --zookeeper zookeeper:2181

查看kafka特定topic的详情,使用–topic与–describe参数

bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic lx_test_topic --describe

创建topic并运行producer
kafka-topics.sh --zookeeper zookeeper:2181 --create --replication-factor 1 --partitions 1 --topic kafkatest #创建topic,本人使用时创建的topic的partitions 都保持了一致

可以在一个窗口中开启生产者,另一个窗口中开启消费者,模拟收发消息

kafka-console-producer.sh --broker-list localhost:9092 --topic kafkatest   #开启生产者

开启消费者

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafkatest --from-beginning       #此处localhost也可换成IP,取决于上面docker-compose.yml中配置的ip是多少

现在,在producer里输入任何内容,都会在consumer里收到。

以下操作未实践,取自网上大佬

跨container的部署

上面的配置只能在单个container里使用,不实用。这是因为kafka advertised配置在localhost上。

需要跨container访问,就需要通过docker的网络访问,要修改这个配置:

version: '2'
services:zookeeper:image: confluentinc/cp-zookeepercontainer_name: zookeepermem_limit: 1024Menvironment:ZOOKEEPER_CLIENT_PORT: 2181kafka:image: confluentinc/cp-kafkacontainer_name: kafkamem_limit: 1024Mdepends_on:- zookeeperenvironment:KAFKA_BROKER_NO: 1KAFKA_ADVERTISED_HOST_NAME: domain_name  # 修改KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://domain_name:9092  # 修改KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1KAFKA_HEAP_OPTS: "-Xmx512M -Xms16M"

改完重启docker-compose,另外,因为zookeeper重启后,topic不会被持久保存,所以重启后需要重新创建topic。

然后启动两个新的container模拟网络访问:

docker run -it --rm --link kafka:domain_name --network kafka_default --name consumer confluentinc/cp-kafka /bin/bash
docker run -it --rm --link kafka:domain_name --network kafka_default --name producer confluentinc/cp-kafka /bin/bash

注意,需要指定一下docker网络为kafka_default,这是官方image使用的默认网络。

然后分别在consumer和producer两个container里测试:

kafka-console-consumer --bootstrap-server domain_name:9092 --topic kafkatest --from-beginning
kafka-console-producer --broker-list domain_name:9092 --topic kafkatest

效果与单container一样。

从Docker网络之外访问的部署

如果需要从docker网络之外访问,就需要把端口映射到宿主机了。

同样需要修改配置,增加网络映射等:

version: '2'
services:zookeeper:image: confluentinc/cp-zookeepercontainer_name: zookeepermem_limit: 1024Menvironment:ZOOKEEPER_CLIENT_PORT: 2181kafka:image: confluentinc/cp-kafkacontainer_name: kafkamem_limit: 1024Mdepends_on:- zookeeperports:  # 增加- 9092:9092  # 增加environment:KAFKA_BROKER_NO: 1KAFKA_ADVERTISED_HOST_NAME: domain_nameKAFKA_ADVERTISED_LISTENERS: PLAINTEXT://domain_name:9092KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1KAFKA_HEAP_OPTS: "-Xmx512M -Xms16M"

然后启动两个新的container模拟外部网络访问:

docker run -it --rm --add-host=domain_name:172.17.0.1 --name consumer confluentinc/cp-kafka /bin/bash
docker run -it --rm --add-host=domain_name:172.17.0.1 --name producer confluentinc/cp-kafka /bin/bash

其中172.17.0.1为docker宿主机在默认docker网络(注意不是kafka_default)里的IP,具体可以通过以下命令查看:

ip route

然后分别在consumer和producer两个container里测试:

kafka-console-consumer --bootstrap-server domain_name:9092 --topic kafkatest --from-beginning
kafka-console-producer --broker-list domain_name:9092 --topic kafkatest

这里有一个坑需要注意的是:

如果宿主机上有防火墙,需要增加一条规则,允许docker网络访问宿主机的端口,否则会连接失败。比如:

# 取得行号
iptables -L INPUT --line-num
# xx为最后一行DROP的行号,插到它前面
iptables -I INPUT xx -p tcp -m tcp -s 172.17.0.0/16 --dport 9092 -j ACCEPT

docker起得kafka日志文件存储路径修改

1.指定log位置:KAFKA_LOG_DIRS: “/kafka/KafkaLog”

    其他参数同理:KAFKA_XXX_ZZZ,对应server.properties里的xxx.zzz

2.把磁盘映射进docker:- /mnt/mntnas/KafkaLog:/kafka/KafkaLog
重新创建kafka容器:进入docker-compose.yml文件位置,docker-compose up -d

[root@izbp1d36xiav554wzwc3klz]~/docker/kafka# cat docker-compose.yml
version: '2'
services:zookeeper:image: wurstmeister/zookeeperports:- "2181:2181"kafka:image: wurstmeister/kafkaports:- "32769:9092"environment:KAFKA_ADVERTISED_HOST_NAME: 111.111.111.111#KAFKA_ADVERTISED_LISTENERS: "192.168.1.9"KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_LOG_DIRS: "/kafka/KafkaLog"volumes:- /var/run/docker.sock:/var/run/docker.sock- /mnt/mntnas/KafkaLog:/kafka/KafkaLogkafka-manager:image: sheepkiller/kafka-managerenvironment:ZK_HOSTS: zookeeper:2181ports:- "39000:9000"
#其中ip地址为宿主机上的 docker-machine ip 地址

最后进入容器,docker exec -it kafka-id bash,能看到$KAFKA_HOME/config/server.properties里的log.dirs参数已经修改过来了。

ubuntu用Docker部署kafka消息服务相关推荐

  1. 基于docker部署的微服务架构(九): 分布式服务追踪 Spring Cloud Sleuth

    为什么80%的码农都做不了架构师?>>>    前言 微服务架构中完成一项功能经常会在多个服务之间远程调用(RPC),形成调用链.每个服务节点可能在不同的机器上甚至是不同的集群上,需 ...

  2. 转 docker 部署 kafka

    1.下载镜像 这里使用了wurstmeister/kafka和wurstmeister/zookeeper这两个版本的镜像   docker pull wurstmeister/zookeeper d ...

  3. docker部署kafka,k8s(helm)部署kafka

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 我们在k8s上部署kafka,接收kafka生产者的数据,并将信息分发到消费者 kafka的基础知识参考:https://blog.csdn.net/ ...

  4. kafka消息服务的producer、broker、consumer的配置

    2019独角兽企业重金招聘Python工程师标准>>> server.properties配置: server.properties中所有配置参数说明(解释)如下列表: 参数 说明( ...

  5. Ubuntu通过docker部署分布式版本控制GitLab(一)

    使用Ubuntu通过docker部署分布式版本控制GitLab(一) 虚拟机部分 作者用的虚拟机是VirtualBox,下载ubuntu镜像 设置虚拟机存储,控制器IDE光驱为下载的镜像 设置虚拟机网 ...

  6. 用Docker部署TensorFlow Serving服务

    文章目录 1. 安装 Docker 2. 使用 Docker 部署 3. 请求服务 3.1 手写数字例子 3.2 猫狗分类例子 参考: https://tf.wiki/zh_hans/deployme ...

  7. Docker学习篇——使用Docker部署账单微服务项目

    Docker概念 Docker 是一个开源的应用容器引擎 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) Docker 可以让开发者打包他们 ...

  8. linux使用spotify/kafka 镜像docker部署 Kafka

    Kafka 简介 作为一个消息中间件,Kafka 以高扩展性.高吞吐量等特点,在互联网项目中被广泛采用. Kafka 中文文档:https://kafka.apachecn.org/ kafka 安装 ...

  9. Kafka之Docker部署Kafka kraft集群

    最近趁着有空想复习一下Kafka原理,之前学的是Kafka1.9的版本,需要Zookeeper作为基础,专门存放Kafka的元数据使用,如Broker.Consumer.Topic等:但下载的时候发现 ...

最新文章

  1. wxWidgets与其他工具库的比较(下)
  2. java软件设计模式只单例设计模式
  3. linux从源码编译软件,linux软件包管理——源码包编译安装
  4. Zigbee系列(概览)
  5. puppet集群之 Nginx and Passenger
  6. 地区的json数据_数据密集型系统基础:数据模型与查询语言
  7. css绘画三角形,实现一些图形
  8. 想在研发群里装?先学会这几个排查K8s问题的办法
  9. Dijkstra(狄克斯特拉)求加权重的邻接矩阵最短路径(初级版)
  10. 完美配置Tomcat的HTTPS
  11. svn钩子自动化同步代码提交任务
  12. Unity设置为中文
  13. java中uri与url的区别_URL和URI的区别与总结
  14. 换服务器系统怎么迁移,更换服务器时,数据迁移的方法
  15. Python语言的适用范围
  16. jupyter notebook  安装nbextension 不显示插件怎么办?
  17. 计算机数字媒体技术考研的学校有哪些,数字媒体技术考研能选择哪些学校
  18. 20175227张雪莹 2018-2019-2 《Java程序设计》第八周学习总结
  19. 源火星球——青龙 详细教程
  20. Flutter升级到预览版

热门文章

  1. 哈工大计算机系统实验一:计算机系统漫游
  2. 记一次音视频开发工程师面试
  3. Oracle IMp/Exp Expdp/Impdp 高版本 导入 低版本的问题
  4. 手把手教你选择高速抓拍工业相机
  5. three.js 树模型_与three.js的圣诞树
  6. CloudCompare 点云距离计算
  7. 检讨书生成微信小程序工具源码-支持流量主
  8. 非正版win7升级win11教程
  9. netpayclient.php,银联 chinapay php版本库文件netpayclient php在php5 4以上版本中提示hex2bin 重定义...
  10. ubantu 无法打开文件 Failed to execute default File manager