
01 前言
ELK在生产环境使用默认需要配置一个中间件,用于异步模式收集日志。我们选用kafka,它可以为数据提供一个统一的、高吞吞量、低延迟的收集平台,这将解决logstash没有消息队列缓存,存在数据丢失隐患的缺点。
官方建议使用Redis做中间件,这个具体看个人收集的数据完整性,kafka对比Redis的话数据比较安全。
本文转自我个人的公众号:天目星 ,请大家多多关注。


一、使用的软件与架构图
linux:CentOS 7.5.1804
Kafka:kafka_2.11-2.2.0
Zookeeper:zookeeper-3.4.14

二、安装软件
前提条件:需要安装java,建议使用java8
1、安装zookeeper
我们使用3台主机搭建zookeeper集群
解压:tar xvf zookeeper-3.4.14.tar.gz
安装路径:cp zookeeper-3.4.14 /usr/local/zookeeper
zookeeper的配置文件zoo_sample.cfg需要重命名为zoo.cfg
修改配置文件(三台主机配置一致)
# vim /usr/local/zookeeper/conf/zoo.cfgtickTime=2000 # 心跳时间单位initLimit=10 # follower超时时间,表示10*2000=20秒syncLimit=5 # leader与follower的应答时间,5*2000=10秒dataDir=/data/zookeeper # 数据保存路径,建议规划好dataLogDir=/data/zookeeper/log # 日志路径clientPort=2181 # 客户端访问Zookeeper服务器的端口# server.A=B:C:D中的A是一个数字,表示这个是第几号服务器;B是这个服务器的IP地址;# C是集群中的leader服务器交换信息的端口;# D是在leader挂掉时专门用来进行选举leader所用的端口。server.1=localhost:2888:3888server.2=localhost:2888:3889server.3=localhost:2888:3890
创建ServerID标识
zookeeper集群模式需要配置一个myid文件,这个文件需要放在dataDir目录下,里面的值就是zoo.cfg配置文件中server.A=B:C:D中A的值。
# 三台服务器都需要配置,A值根据zoo.cfg情况配置echo "1" > /data/zookeeper/myid
配置环境变量:
配置变量方便后期启动服务
cat >>/etc/profile <<EOFexport ZOOKEEPER_HOME=/opt/zookeeperexport PATH={$PATH}:{$ZOOKEEPER_HOME}/binEOF
2、安装kafka
安装好zookeeper后继续在每台主机上安装kafka
解压:tar xvf kafka_2.11-2.2.0.tgz
安装路径:cp kafka_2.11-2.2.0 /usr/local/kafka
修改配置文件
# vim /usr/local/kafka/config/server.propertiesbroker.id=1 # 集群唯一ID,另外l两台机依次设置为2,3listeners=PLAINTEXT://:9092 #监听的端口num.network.threads=3 #broker处理消息的最大线程数num.io.threads=8 #broker处理磁盘IO的线程数,数值最好大于机器的硬盘数socket.send.buffer.bytes=102400 #socket的发送缓冲区大小socket.receive.buffer.bytes=102400 #socket的接受缓冲区socket.request.max.bytes=104857600 #socket请求的最大数值log.dirs=/tmp/kafka-logs #kafka存放日志的路径num.partitions=1 #每个topic的分区个数num.recovery.threads.per.data.dir=1 #启动时日志恢复的每个数据目录中的线程数offsets.topic.replication.factor=1transaction.state.log.replication.factor=1transaction.state.log.min.isr=1log.retention.hours=168 #数据存储的最大时间log.segment.bytes=1073741824 #topic的分区大小log.retention.check.interval.ms=300000 #文件大小检查的周期时间zookeeper.connect=localhost:2181 #zookeeper集群的地址,多个之间用逗号分割zookeeper.connection.timeout.ms=6000 #ZooKeeper的连接超时时间group.initial.rebalance.delay.ms=0 #组织协调时间,生产用建议设置等于3delete.topic.enable=true
三、启动与测试
1、编写启动脚本
zookeeper集群启动脚本
#!/bin/bash# Auther: Gordon Luo# Date: 2019-4-25 11:30# Function: 用于zookeeper集群启动使用#### zookeeper_cluster.sh ####APPHOME="/usr/local/zookeeper"ZKS="node1 node2 node3"APP_NAME="zookeeper"if [ $# -ne 1 ];thenecho "Usage zookeeper.sh {start|stop|status}"exit 1fi#echo OKfor i in $ZKS;doecho "Start ${APP_NAME} on ${i}"ssh ${i} "source /etc/profile; sh ${APPHOME}/bin/zkServer.sh $1"if [ $? -ne 0 ];thenecho "Start ${APP_NAME} on ${i} is ok"fidoneecho ALL ${ZKS} are $1exit 0
kafka集群启动脚本
#!/bin/bash# Auther: Gordon Luo# Date: 2019-4-25 15:32# Function: 用于Kafka集群启动使用#### kafka_cluster.sh ####APP_HOME="/usr/local/kafka"KAFKAS="node1 node2 node3"APP_NAME="kafka"function kafka_start(){for i in ${KAFKAS};dossh ${i} "source /etc/profile;${APP_HOME}/bin/kafka-server-start.sh -daemon ${APP_HOME}/config/server.properties"done}function kafka_stop(){for i in ${KAFKA_CFGNAME};dossh localhost " source /etc/profile;${APP_HOME}/bin/kafka-server-stop.sh"done}case $1 instart)kafka_start;;stop)kafka_stop;;*)echo "Usage: kafka.sh {start|stop}"esac
2、启动服务
启动zookeeper与kafka集群
sh zookeeper_cluster.sh start
sh kafka_cluster.sh start
关闭集群
sh zookeeper_cluster.sh stop
sh kafka_cluster.sh stop
3、测试kafka生产与消费
创建topic
kafka-topics.sh --create --zookeeper node1:2181,node2:2181,node3:2181 --replication-factor 3 --partitions 2 --topic hadoop参数说明:–-zookeeper:指定连接zk的服务器,–-replication-factor:指定副本数量–-partitions:指定分区数量–-topic:主题名称
查看已创建的topic列表
kafka-topics.sh --list --zookeeper node1:2181
查看某个topic详细信息
kafka-topics.sh --describe --zookeeper node1:2181 --topic hadoop
启动某个主题的生产者
kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic hadoop#弹出以下箭头后输入数据>Hello World>welcome to kafka
启动某个主题的消费者
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic hadoop --from-beginning# --from-beginning:从最开始消费数据,没有该参数表示只会消费新产生的数据。Hello Worldwelcome to kafka
完毕

ELK集群与Kafka集成:日志收集中间件
本文介绍了在生产环境中使用ELK(Elasticsearch, Logstash, Kibana)时,如何利用Kafka作为日志收集的中间件,以解决Logstash直接收集日志可能存在的数据丢失问题。文章详细讲解了Kafka和Zookeeper的安装配置,并提供了启动与测试的步骤,强调了Kafka相对于Redis在数据安全性上的优势。"
116990068,9902077,因子模型:理论与选择准则,"['统计学', '统计模型', '多元统计分析']
409

被折叠的 条评论
为什么被折叠?



