docker volume rm $(docker volume ls -qf dangling=true)
docker rmi $(docker images | grep "^<none>" | awk "{print $3}"
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
Zookeeper采用zookeeper
Kafka采用wurstmeister/kafka
Kafka-Manager采用scjtqs/kafka-manager
Mysql采用mysql/mysql-server
docker network create docker-net --subnet 172.20.10.0/16
docker network ls
hostname | Ip addr | port | listener |
---|---|---|---|
zook1 | 172.20.10.11 | 2184:2181 | |
zook2 | 172.20.10.12 | 2185:2181 | |
zook3 | 172.20.10.13 | 2186:2181 | |
kafka1 | 172.20.10.14 | 内部9092:9092,外部9192:9192 | kafka1 |
kafka2 | 172.20.10.15 | 内部9093:9093,外部9193:9193 | kafka2 |
Kafka3 | 172.20.10.16 | 内部9094:9094,外部9194:9194 | Kafka3 |
本机(宿主机Mbp) | 172.20.10.2 | ||
kafka manager | 172.20.10.10 | 9000:9000 |
version: '3.4'
services:
zook1:
image: zookeeper:latest
#restart: always #自动重新启动
hostname: zook1
container_name: zook1 #容器名称,方便在rancher中显示有意义的名称
ports:
- 2183:2181 #将本容器的zookeeper默认端口号映射出去
volumes: # 挂载数据卷 前面是宿主机即本机的目录位置,后面是docker的目录
- "/Users/konsy/Development/volume/zkcluster/zook1/data:/data"
- "/Users/konsy/Development/volume/zkcluster/zook1/datalog:/datalog"
- "/Users/konsy/Development/volume/zkcluster/zook1/logs:/logs"
environment:
ZOO_MY_ID: 1 #即是zookeeper的节点值,也是kafka的brokerid值
ZOO_SERVERS: server.1=zook1:2888:3888;2181 server.2=zook2:2888:3888;2181 server.3=zook3:2888:3888;2181
networks:
docker-net:
ipv4_address: 172.20.10.11
zook2:
image: zookeeper:latest
#restart: always #自动重新启动
hostname: zook2
container_name: zook2 #容器名称,方便在rancher中显示有意义的名称
ports:
- 2184:2181 #将本容器的zookeeper默认端口号映射出去
volumes:
- "/Users/konsy/Development/volume/zkcluster/zook2/data:/data"
- "/Users/konsy/Development/volume/zkcluster/zook2/datalog:/datalog"
- "/Users/konsy/Development/volume/zkcluster/zook2/logs:/logs"
environment:
ZOO_MY_ID: 2 #即是zookeeper的节点值,也是kafka的brokerid值
ZOO_SERVERS: server.1=zook1:2888:3888;2181 server.2=zook2:2888:3888;2181 server.3=zook3:2888:3888;2181
networks:
docker-net:
ipv4_address: 172.20.10.12
zook3:
image: zookeeper:latest
#restart: always #自动重新启动
hostname: zook3
container_name: zook3 #容器名称,方便在rancher中显示有意义的名称
ports:
- 2185:2181 #将本容器的zookeeper默认端口号映射出去
volumes:
- "/Users/konsy/Development/volume/zkcluster/zook3/data:/data"
- "/Users/konsy/Development/volume/zkcluster/zook3/datalog:/datalog"
- "/Users/konsy/Development/volume/zkcluster/zook3/logs:/logs"
environment:
ZOO_MY_ID: 3 #即是zookeeper的节点值,也是kafka的brokerid值
ZOO_SERVERS: server.1=zook1:2888:3888;2181 server.2=zook2:2888:3888;2181 server.3=zook3:2888:3888;2181
networks:
docker-net:
ipv4_address: 172.20.10.13
networks:
docker-net:
name: docker-net
docker compose -p zookeeper -f ./zk-docker-compose.yml up -d
version: '2'
services:
kafka1:
image: docker.io/wurstmeister/kafka
#restart: always #自动重新启动
hostname: kafka1
container_name: kafka1
ports:
- 9093:9093
- 9193:9193
environment:
KAFKA_BROKER_ID: 1
KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9193
#KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094
SKAFKA_ADVERTISED_LISTENERS: INSIDE://kafka1:9093,OUTSIDE://localhost:9193
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181
ALLOW_PLAINTEXT_LISTENER : 'yes'
JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据
volumes:
- /Users/konsy/Development/volume/kafka/kafka1/wurstmeister/kafka:/wurstmeister/kafka
- /Users/konsy/Development/volume/kafka/kafka1/kafka:/kafka
external_links:
- zook1
- zook2
- zook3
networks:
docker-net:
ipv4_address: 172.20.10.14
kafka2:
image: docker.io/wurstmeister/kafka
#restart: always #自动重新启动
hostname: kafka2
container_name: kafka2
ports:
- 9094:9094
- 9194:9194
environment:
KAFKA_BROKER_ID: 2
KAFKA_LISTENERS: INSIDE://:9094,OUTSIDE://:9194
#KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka2:9094,OUTSIDE://localhost:9194
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181
ALLOW_PLAINTEXT_LISTENER : 'yes'
JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据
volumes:
- /Users/konsy/Development/volume/kafka/kafka2/wurstmeister/kafka:/wurstmeister/kafka
- /Users/konsy/Development/volume/kafka/kafka2/kafka:/kafka
external_links:
- zook1
- zook2
- zook3
networks:
docker-net:
ipv4_address: 172.20.10.15
kafka3:
image: docker.io/wurstmeister/kafka
#restart: always #自动重新启动
hostname: kafka3
container_name: kafka3
ports:
- 9095:9095
- 9195:9195
environment:
KAFKA_BROKER_ID: 3
KAFKA_LISTENERS: INSIDE://:9095,OUTSIDE://:9195
#KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka3:9095,OUTSIDE://localhost:9195
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181
ALLOW_PLAINTEXT_LISTENER : 'yes'
JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据
volumes:
- /Users/konsy/Development/volume/kafka/kafka3/wurstmeister/kafka:/wurstmeister/kafka
- /Users/konsy/Development/volume/kafka/kafka3/kafka:/kafka
external_links:
- zook1
- zook2
- zook3
networks:
docker-net:
ipv4_address: 172.20.10.16
networks:
docker-net:
name: docker-net
docker compose -f ./kafka-docker-compose.yml up -d
listeners
: 学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka
服务。advertised.listeners
:和 listeners
相比多了个 advertised
。Advertised
的含义表示宣称的、公布的,就是说这组监听器是 Broker
用于对外发布的。比如说:
listeners: INSIDE://172.17.0.10:9092,OUTSIDE://172.17.0.10:9094
advertised_listeners: INSIDE://172.17.0.10:9092,OUTSIDE://<公网 ip>:端口
kafka_listener_security_protocol_map: "INSIDE:SASL_PLAINTEXT,OUTSIDE:SASL_PLAINTEXT"
kafka_inter_broker_listener_name: "INSIDE"
advertised_listeners
监听器会注册在 zookeeper
中;
当我们对 172.17.0.10:9092
请求建立连接,kafka
服务器会通过 zookeeper
中注册的监听器,找到 INSIDE
监听器,然后通过 listeners
中找到对应的 通讯 ip
和 端口;
同理,当我们对 <公网 ip>:端口
请求建立连接,kafka
服务器会通过 zookeeper
中注册的监听器,找到 OUTSIDE
监听器,然后通过 listeners
中找到对应的 通讯 ip
和 端口 172.17.0.10:9094
;
总结:advertised_listeners
是对外暴露的服务端口,真正建立连接用的是 listeners
。
version: '2'
services:
kafka-manager:
image: scjtqs/kafka-manager:latest
restart: always
hostname: kafka-manager
container_name: kafka-manager
ports:
- 9000:9000
external_links: # 连接本compose文件以外的container
- zook1
- zook2
- zook3
- kafka1
- kafka2
- kafka3
environment:
ZK_HOSTS: zook1:2181,zook2:2181,zook3:2181
KAFKA_BROKERS: kafka1:9093,kafka2:9094,kafka3:9095
APPLICATION_SECRET: letmein
KM_ARGS: -Djava.net.preferIPv4Stack=true
networks:
docker-net:
ipv4_address: 172.20.10.10
networks:
docker-net:
external:
name: docker-net
docker compose -f ./kafka-manager-docker-compose.yml up -d
进入kafka容器的命令行:
docker exec -ti kafka /bin/bash
进入kafka所在目录:
cd opt/kafka_2.13-2.8.1/
bin/kafka-topics.sh --create --zookeeper zook1:2181 --replication-factor 2 --partitions 2 --topic partopic
在kafka容器中的 opt/kafka_2.12-1.1.0/ 目录下输入
bin/kafka-topics.sh --describe --zookeeper zook1:2181 --topic partopic
文章浏览阅读7.4k次,点赞15次,收藏72次。目录文章目录目录 前言 参考文献 通信网络 核心网演进之路 早古时期 2G 网络架构 3G 网络架构 4G 网络架构 5G 5G 网络的需求 5G 网络架构的设计原则 5G 网络的逻辑架构 5G 核心网络的关键技术 SBA 基于服务的架构 微服务化 基于服务的接口 CUPS 控制与用户面分离 网络切片 ..._5g mepm
文章浏览阅读2.3k次。1、创建Shp文件IFeature_arcgis engine 创建shp
文章浏览阅读3.5k次,点赞4次,收藏37次。论文年份:TPAMI 2021,论文被引:448(2022/05/17)_遮挡行人再识别综述
文章浏览阅读2.1k次。Vue Cron生成器 (vue-cron-generator)a project using vue,element-ui to generate cron expression. 使用vue,element-ui生成cron表达式的项目。 View Demo查看演示 View Github 查看Github 用途(示例) (Use(Example))Install depend..._vue-cron-generator
文章浏览阅读7.4k次,点赞14次,收藏52次。效果:默认状态下,两灯熄灭。 温度升高到一定值,红色LED亮,绿色LED不亮,表示温度过高。 温度降低到一定值,绿色LED亮,红色LED不亮,表示温度过低。 原理:首先该电路图关键在于PTC(正温度系数电阻)会随着温度的升高而阻值增大。而高温报警(上面)的反相输入端电压大小固定;而低温报警器(下面)的同向输入端电压大小固定。输出受PTC电阻的..._温度上下限报警电路
文章浏览阅读366次。随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。项目中, 一个模块里面用到上百个jar包是非常正常的。_httpcomponents maven
文章浏览阅读755次。知识图谱TensorFlow运行机制TensorFlow是基于计算图的深度学习编程模型Tensor表示张量,其实质上是某种类型的多维数组 Flow表示基于数据流图的计算,实质上是张量在不同节点间的转化过程。在TensorFlow中,计算图中的节点称为OP(即operation的缩写),节点之间的边描述了计算之间的依赖关系。在计算过程中,一个节点可获得0或多个张量,产生0或多个张量。TensorFlow程序通常被组织成图的构建阶段和执行阶段在构建阶段,节点的执行步骤被描述._计算图实际上描述的是需要依次完成的计算单元以及这些计算单元之间的相互依赖关系
文章浏览阅读215次。keepalived可以将多个无状态的单点通过虚拟IP(以下称为VIP)漂移的方式搭建成一个高可用服务,常用组合比如 keepalived+nginx,lvs,haproxy和memcached等。它的实现基础是VRRP协议,包括核心的MASTER竞选机制都是在VRRP协议所约定的。一、配置说明:keepalived的配置位于/etc/keepalived/keepalived.conf,配置..._vip漂移原理
文章浏览阅读333次。JAVA 正则表达式 (超详细,转)在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限_java match getbeginning
文章浏览阅读184次。什么是类型转换?Spring MVC 中在控制器方法中 把 请求 中的 参数 映射为 指定类型,指定类型 可以是自己定义的类型,这就是Spring的类型转换。类型转换的框架原理 术语定义:a. ServletRequest : 请求b. DataBuilder : 类似于DispatcherServlet 在整个框架原理中起调度作用,他是数据绑定的核心组件。c. Co..._springmvc中负责类型转换的组件
文章浏览阅读193次。我们需要汇总数据而不用把他们实际检索出来,他们主要用来进行分析和报表数据的生成。1、AVG:通过对表中行数计数并计算特定列值之和,求得该列的平均值。可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。如下:select avg(prod_price) as avg_price from products;以上语句的含义是,它包含products表中所有产品的平均价格。avg()函数忽略列值..._mysql 集合函数比较
文章浏览阅读2k次。使用 TensorFlow, 你必须明白 TensorFlow:使用图 (graph) 来表示计算任务.在被称之为 会话 (Session) 的上下文 (context) 中执行图.使用 tensor 表示数据.通过 变量 (Variable) 维护状态.使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据...._tensorflow用法