ELK集群组件-kafka

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 ];then        echo "Usage zookeeper.sh {start|stop|status}"        exit 1fi#echo OKfor i in $ZKS;do        echo "Start ${APP_NAME} on ${i}"        ssh ${i} "source /etc/profile; sh ${APPHOME}/bin/zkServer.sh $1"        if [ $? -ne 0 ];then                echo "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};do        ssh ${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};do        ssh localhost " source /etc/profile;${APP_HOME}/bin/kafka-server-stop.sh"  done}case $1 in        start)                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

完毕

请关注我的个人公众号

猜你喜欢

转载自blog.csdn.net/Gordon_luo/article/details/92803640