前端监控项目环境搭建-Kafka

news/2024/12/22 19:41:17/

目录

如何把 Docker 容器封装成镜像

Docker 部署 Kafka 集群(mac) 

Centos 容器启动 rsyslog 服务

Rsyslog 转发日志至 Kafka 

node-rdkafka@2.18.0 使用文档 

Librdkafka@2.3.0 国内仓库


如何把 Docker 容器封装成镜像

背景:centos 容器中运行 nginx + rsyslog,另一容器运行 Kafka。centos 容器 rsyslog 无法向 Kafka 生产消息。

要将一个容器封装成一个镜像,你需要使用 Docker 提供的 docker commit 命令。这个命令会基于容器的当前状态创建一个新的镜像。

下面是使用 docker commit 命令的基本步骤:

1. 首先,确保你有一个正在运行的容器。你可以通过运行 docker ps 来查看当前运行的容器。

2. 使用 docker commit 命令创建镜像。命令的格式如下:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

其中:

  • [OPTIONS] 是可选的,可以用来指定新镜像的说明等信息。

  • CONTAINER 是要提交的容器的ID或名称。

  • [REPOSITORY[:TAG]] 是新镜像的名称和可选的标签。如果不指定标签,默认标签是latest

例如,如果你有一个名为 my_container 的容器,你想将它封装成名为 my_image 的镜像,并且标签为 v1.0,你可以运行:

docker commit my_container my_image:v1.0

3. 运行命令后,使用 docker images 命令可以查看新创建的镜像。

下面是一个简单的例子:

# 创建并运行一个容器
docker run -d --name my_container ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"# 提交容器到镜像
docker commit my_container my_image:v1.0# 查看创建的镜像
docker images

执行上述步骤后,你就会有一个包含了特定输出的镜像 my_image:v1.0。 

Docker 部署 Kafka 集群(mac) 

1. 集群规划

hostnameip addrportlistener
zook1172.20.10.112183:2181
zook2172.20.10.122184:2181
zook3172.20.10.132185:2181
kafka1172.20.10.14内部 9093:9093,外部 9193:9193
kafka2172.20.10.15内部 9094:9094,外部 9194:9194
kafka3172.20.10.16内部 9095:9095,外部 9195:9195

2. 创建网络

# 配合命令:
docker network create --driver bridge --subnet 172.20.10.0/25 --gateway 172.20.10.1  zk_network

如何在 Docker 中管理和配置容器的网络_怎么修改容器的网络-CSDN博客 

3. 编写 docker 文件

# zk-docker-compose.ymlversion: '3.4'services:zook1:image: zookeeper:latest#restart: always #自动重新启动hostname: zook1container_name: zook1 #容器名称,方便在rancher中显示有意义的名称ports:- 2183:2181 #将本容器的zookeeper默认端口号映射出去volumes:# 挂载数据卷 前面是宿主机即本机的目录位置,后面是docker的目录- "./zook1/data:/data"- "./zook1/datalog:/datalog"- "./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;2181networks:zk_network:ipv4_address: 172.20.10.11zook2:image: zookeeper#restart: always #自动重新启动hostname: zook2container_name: zook2 #容器名称,方便在rancher中显示有意义的名称ports:- 2184:2181 #将本容器的zookeeper默认端口号映射出去volumes:- "./zook2/data:/data"- "./zook2/datalog:/datalog"- "./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;2181networks:zk_network:ipv4_address: 172.20.10.12zook3:image: zookeeper#restart: always #自动重新启动hostname: zook3container_name: zook3 #容器名称,方便在rancher中显示有意义的名称ports:- 2185:2181 #将本容器的zookeeper默认端口号映射出去volumes:- "./zook3/data:/data"- "./zook3/datalog:/datalog"- "./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;2181networks:zk_network:ipv4_address: 172.20.10.13
networks:zk_network:name: zk_networkexternal: true
# kafka-docker-compose.ymlversion: '2'services:kafka1:image: wurstmeister/kafkarestart: always #自动重新启动hostname: kafka1container_name: kafka1ports:- 9093:9093- 9193:9193environment:KAFKA_BROKER_ID: 1KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9193#KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094KAFKA_ADVERTISED_LISTENERS: INSIDE://172.20.10.14:9093,OUTSIDE://localhost:9193KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXTKAFKA_INTER_BROKER_LISTENER_NAME: INSIDEKAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181ALLOW_PLAINTEXT_LISTENER: 'yes'JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据volumes:- ./kafka1/wurstmeister/kafka:/wurstmeister/kafka- ./kafka1/kafka:/kafkaexternal_links:- zook1- zook2- zook3networks:zk_network:ipv4_address: 172.20.10.14kafka2:image: wurstmeister/kafkarestart: always #自动重新启动hostname: kafka2container_name: kafka2ports:- 9094:9094- 9194:9194environment:KAFKA_BROKER_ID: 2KAFKA_LISTENERS: INSIDE://:9094,OUTSIDE://:9194#KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094KAFKA_ADVERTISED_LISTENERS: INSIDE://172.20.10.15:9094,OUTSIDE://localhost:9194KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXTKAFKA_INTER_BROKER_LISTENER_NAME: INSIDEKAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181ALLOW_PLAINTEXT_LISTENER: 'yes'JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据volumes:- ./kafka2/wurstmeister/kafka:/wurstmeister/kafka- ./kafka2/kafka:/kafkaexternal_links:- zook1- zook2- zook3networks:zk_network:ipv4_address: 172.20.10.15kafka3:image: wurstmeister/kafkarestart: always #自动重新启动hostname: kafka3container_name: kafka3ports:- 9095:9095- 9195:9195environment:KAFKA_BROKER_ID: 3KAFKA_LISTENERS: INSIDE://:9095,OUTSIDE://:9195#KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094KAFKA_ADVERTISED_LISTENERS: INSIDE://172.20.10.16:9095,OUTSIDE://localhost:9195KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXTKAFKA_INTER_BROKER_LISTENER_NAME: INSIDEKAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181ALLOW_PLAINTEXT_LISTENER: 'yes'JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据volumes:- ./kafka3/wurstmeister/kafka:/wurstmeister/kafka- ./kafka3/kafka:/kafkaexternal_links:- zook1- zook2- zook3networks:zk_network:ipv4_address: 172.20.10.16
networks:zk_network:name: zk_networkexternal: true
# kafka-manager-docker-compose.ymlversion: '2'services:kafka-manager:image: scjtqs/kafka-manager:latestrestart: alwayshostname: kafka-managercontainer_name: kafka-managerports:- 9000:9000external_links:# 连接本compose文件以外的container- zook1- zook2- zook3- kafka1- kafka2- kafka3environment:ZK_HOSTS: zook1:2181,zook2:2181,zook3:2181KAFKA_BROKERS: kafka1:9093,kafka2:9094,kafka3:9095APPLICATION_SECRET: letmeinKM_ARGS: -Djava.net.preferIPv4Stack=truenetworks:zk_network:ipv4_address: 172.20.10.10
networks:zk_network:name: zk_networkexternal: true

4. 在文件目录下,依次 启动docker 文件

docker compose -p zookeeper -f ./zk-docker-compose.yml up -d
docker compose -f ./kafka-docker-compose.yml up -d
docker compose -f ./kafka-manager-docker-compose.yml up -d

5. 参考链接

docker 部署 kafka集群 【mac】_mac docker kafka-CSDN博客 

https://www.cnblogs.com/jay763190097/p/10292227.html

Centos 容器启动 rsyslog 服务

1. 参考链接

https://zhuanlan.zhihu.com/p/606856175?utm_id=0 

Rsyslog 转发日志至 Kafka 

1. 参考链接

最佳实践:Rsyslog转发日志至kafka 

日志收集之rsyslog to kafka_rsyslog template kafka-CSDN博客 

rsyslog配置详解: https://www.cnblogs.com/jiyanfeng/p/17606513.html 

2. 安装 rsyslog && rsyslog-kafka

yum install rsyslog
yum install rsyslog-kafka

安装完成后,查看 /lib64/rysylog/ 中是否存在 omkafka.so,验证 rsyslog-kafka 是否安装成功。

3. rsyslog 配置

编辑配置文件(路径 `/etc/rsyslog.conf`  ),在配置项 `#### MODULES ####` 的下面添加如下配置(或者在 `/etc/rsyslogd/` 目录下添加 `XXX.conf` 配置文件) 

# 加载 omkafka 和 imfile 模块
module(load="omkafka")
module(load="imfile")# nginx template
template(name="nginxAccessTemplate" type="string" string="%hostname%<-+>%syslogtag%<-+>%msg%\n")# ruleset
ruleset(name="nginx-kafka") {# 日志转发 kafkaaction (type="omkafka"template="nginxAccessTemplate"topic="fee-test"broker="localhost:9092")
}# 定义消息来源及设置相关的 action
input(type="imfile" Tag="nginx-accesslog" File="/var/log/nginx/access.log" Ruleset="nginx-kafka")

配置简单说明:

* `localhost:9092` 需要修改为你自己的kafka地址(如果为集群多个地址逗号分隔)

* `/var/log/nginx/access.log` 是监控的nginx日志文件

* `topic: fee-test`后续通过 `kafka-manager` 创建

修改完配置后运行: `rsyslogd -N 1` 查看配置是否报错;`rsyslogd -dn` debug 模式运行。

然后重启 `rsyslog`:`service rsyslog restart` `systemctl restart rsyslog` 。重启后查看 `/var/log/message` 中日志是否报错。

4. kafka 报错:InvalidReceiveException: Invalid receive (size = 1195725856 larger than 104857600)

将 $KAFKA_HOME/config/server.properties 文件中的 socket.request.max.bytes 值重置为超过数据包大小,然后重新启动 kafka 服务器。将 socket.request.max.bytes 翻倍。

5. Kafka 配置文件位置

Kafka 配置文件 server.properties 的位置取决于Kafka安装的路径。通常情况下,当你从Apache 官方网站下载 Kafka 或通过工具如 wget 或 curl 命令行工具下载时,配置文件会被放置在 Kafka 安装目录的 config 子目录下。

例如,如果你的 Kafka 安装在 /opt/kafka 目录,那么配置文件 server.properties 的完整路径就是 /opt/kafka/config/server.properties

如果你是通过某种包管理器(如 apt 或 yum)安装的 Kafka,配置文件的位置可能会有所不同,但通常也会在 /etc/kafka 或 /etc/kafka/conf 目录下。

要修改 Kafka 配置,你需要编辑 server.properties 文件,并根据你的需求进行相应的设置。例如,你可以修改 log.dirs 来指定日志文件存放的目录,或者修改 listeners 来指定Kafka 监听的地址和端口。

node-rdkafka@2.18.0 使用文档 

1. 参考链接

node-rdkafka - npm 

2. npm install node-rdkafka 时 node-gyp rebuild 卡住解决办法 

node-gyp 需要 Python2.7 环境。

可以使用 npm install --loglevel verbose 查看安装时候的详细日志。

node-rdkafka install 时需要构建,通常会卡住。因为构建需要 node 源码来提供头文件,连接外网下载很慢。so 建议自己下载后放置在 /Users/xxx/Library/Caches/node-gyp/10.23.3 中。

node 区分 arm64 x86 x64 等版本。注意和宿主机的兼容。 

├── include  
│       └── node  
└── installVersion
cat installVersion   
9 

 npm install时node-gyp rebuild 卡住解决办法 - 杜神的技术博客 - ITeye博客 

https://www.cnblogs.com/mliudong/p/4528539.html 

Librdkafka@2.3.0 国内仓库

librdkafka: librdkafka 是 Apache Kafka 的 C/C++ 开发包,提供生产者、消费者和管理客户端 - Gitee.com 

 


http://www.ppmy.cn/news/1504664.html

相关文章

siRNA药物药效预测(二)(Datawhale AI 夏令营)

一、task2解析 # 读取文件 df_original pd.read_csv("data/train_data.csv") # print(df_original) # 获取原始训练数据的行数 n_original df_original.shape[0] # 读取数据 df_submit pd.read_csv("data/sample_submission.csv")# 合并两个数据集 # a…

2024最新版付费进群系统源码全开源

2024最新修复版独立付费进群系统源码全开源&#xff0c;基于ThinkPHP框架开发。 1、修复SQL表 2、修复支付文件 3、修复支付图标不显示 4、修复定位、分销逻辑、抽成逻辑 5、新增支持源支付、易支付的支付接口 6、修复官方微信、支付宝支付接口文件 本来早就可以完工的&…

Java面试题--JVM大厂篇之破解Java性能瓶颈!深入理解Parallel GC并优化你的应用

目录 引言&#xff1a; 正文&#xff1a; 1. 理解Parallel GC的工作原理 2. 配置Parallel GC 3. 监控和分析GC日志 4. 常见调优技巧 5. 持续迭代和优化 结束语&#xff1a; 补充考虑 1. 综合考虑吞吐量与响应时间 2. 评估和优化垃圾回收频率 3. 动态调整与自适应策…

私有云,什么是私有云?

联通国际公司企业私有云解决方案 产品介绍 在当今数字化转型的大背景下&#xff0c;企业对于数据的安全性和控制力有着更高的要求。联通国际公司推出的企业私有云解决方案&#xff0c;旨在为客户提供一个高度定制化的云平台&#xff0c;满足企业对于数据隐私保护和合规性的需…

网络安全入门教程(非常详细)从零基础入门到精通_网路安全 教程

前言 1.入行网络安全这是一条坚持的道路&#xff0c;三分钟的热情可以放弃往下看了。2.多练多想&#xff0c;不要离开了教程什么都不会了&#xff0c;最好看完教程自己独立完成技术方面的开发。3.有时多百度&#xff0c;我们往往都遇不到好心的大神&#xff0c;谁会无聊天天给…

数据库文件管理

数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库&#xff1a; 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer 小型:Sqlite 2.非关…

【C语言】Top K问题【建小堆】

前言 TopK问题&#xff1a;从n个数中&#xff0c;找出最大&#xff08;或最小&#xff09;的前k个数。 在我们生活中&#xff0c;经常会遇到TopK问题 比如外卖的必吃榜&#xff1b;成单的前K名&#xff1b;各种数据的最值筛选 问题分析 显然想开出40G的空间是不现实的&#…

WEB渗透Web突破篇-SSRF

定义 服务端请求伪造 构造一个由服务器发出请求的漏洞 服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制成因 file_get_contents()、fsockopen()、curl_exec()、fopen()、readfile()等函数使用不当会造成SSRF漏洞挖掘 转码服务 在线翻译 获取超链接…