ELK03-使用kafka作为缓存收集日志

1.Kafka简介

  Kafka 被称为下一代分布式消息系统,是非营利性组织ASF(Apache Software Foundation,简称为ASF)基金会中的一个开源项目,比如HTTP Server、Hadoop、ActiveMQ、Tomcat等开源软件都属于Apache基金会的开源软件,类似的消息系统还有RbbitMQ、ActiveMQ、ZeroMQ,最主要的优势是其具备分布式功能、并且结合zookeeper可以实现动态扩容。

 

2.部署和配置Kafka集群

1)安装Kafka集群前的准备工作

    三台Kafka需要互相能够ping通,所以需要配置/etc/hosts文件,我自己测试机配置如下:

 第1台主机:   

[root@elk01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.96.211.209 elk01
10.96.211.110 elk02
10.96.211.111 elk03

[root@elk01 ~]# ping elk02
PING elk02 (10.96.211.110) 56(84) bytes of data.
64 bytes from elk02 (10.96.211.110): icmp_seq=1 ttl=64 time=0.802 ms
64 bytes from elk02 (10.96.211.110): icmp_seq=2 ttl=64 time=0.389 ms
^C
--- elk02 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.389/0.595/0.802/0.207 ms
You have new mail in /var/spool/mail/root
[root@elk01 ~]# ping elk03
PING elk03 (10.96.211.111) 56(84) bytes of data.
64 bytes from elk03 (10.96.211.111): icmp_seq=1 ttl=64 time=0.942 ms
64 bytes from elk03 (10.96.211.111): icmp_seq=2 ttl=64 time=1.05 ms
^C
--- elk03 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.942/0.996/1.051/0.062 ms

 

第2台主机

[root@elk02 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.96.211.110 elk02
10.96.211.209 elk01
10.96.211.111 elk03

[root@elk02 ~]# ping elk01
PING elk01 (10.96.211.209) 56(84) bytes of data.
64 bytes from elk01 (10.96.211.209): icmp_seq=1 ttl=64 time=0.413 ms
64 bytes from elk01 (10.96.211.209): icmp_seq=2 ttl=64 time=0.416 ms
^C
--- elk01 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1039ms
rtt min/avg/max/mdev = 0.413/0.414/0.416/0.020 ms
[root@elk02 ~]# ping elk03
PING elk03 (10.96.211.111) 56(84) bytes of data.
64 bytes from elk03 (10.96.211.111): icmp_seq=1 ttl=64 time=0.450 ms
64 bytes from elk03 (10.96.211.111): icmp_seq=2 ttl=64 time=0.807 ms
64 bytes from elk03 (10.96.211.111): icmp_seq=3 ttl=64 time=0.501 ms
^C
--- elk03 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2107ms
rtt min/avg/max/mdev = 0.450/0.586/0.807/0.157 ms

 

第3台主机

[root@elk03 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.96.211.110 elk02
10.96.211.209 elk01
10.96.211.111 elk03

[root@elk03 ~]# ping elk01
PING elk01 (10.96.211.209) 56(84) bytes of data.
64 bytes from elk01 (10.96.211.209): icmp_seq=1 ttl=64 time=0.865 ms
64 bytes from elk01 (10.96.211.209): icmp_seq=2 ttl=64 time=0.971 ms
^C
--- elk01 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 0.865/0.918/0.971/0.053 ms
[root@elk03 ~]# ping elk02
PING elk02 (10.96.211.110) 56(84) bytes of data.
64 bytes from elk02 (10.96.211.110): icmp_seq=1 ttl=64 time=0.455 ms
64 bytes from elk02 (10.96.211.110): icmp_seq=2 ttl=64 time=0.660 ms
^C
--- elk02 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.455/0.557/0.660/0.105 ms

 

2)安装标准3台Kafka集群

a. zookeeper简介

Kafka安装使用依赖zookeeper,所以安装Kafka之前需要安装zookeeper

zookeeper集群特性:整个集群中只要有超过集群数量一半的zookeeper工作是正常的,那么整个集群对外就是可用的,例如有2台服务器做了一个zaookeeper,只要有任何一台故障或宕机,那么这个zookeeper集群就是不可用的了.因为剩下的一台没有超过集群的一半的数量,但是假如有三台zookeeper组成一个集群,那么损坏一台还剩两台,大于3台的一半,所以损坏一台还是可以正常运行的,但是再损坏一台就只剩下一台,集群就不可用了。

如果是4台组成,损坏一台正常,损坏两台还剩两台,不满足集群总数的一半,所以3台的集群和4台的集群算坏两台的结果都是集群不可用.所以这也是为什么集群一般是奇数的原因。

b. 安装配置zookeeper

  Kafka安装使用依赖zookeeper,所以安装Kafka之前需要安装zookeeper。

 

 安装zookeeper前的准备工作 

安装JDK1.8,如果主机默认存在JDK1.8,就不需要单独安装JDK了。我的三台主机默认是JDK1.8我就不安装了。

三台主机创建统一的存放软件包的目录:/opt/software

[root@elk01 ~]# mkdir /opt/software

[root@elk02 ~]# mkdir /opt/software

[root@elk03 ~]# mkdir /opt/software

 

安装zookeeper过程如下:

第1台主机

[root@elk01 software]# pwd
/opt/software

[root@elk01 software]# [root@elk01 software]# tar zxf zookeeper-3.4.11.tar.gz -C /opt/
[root@elk01 software]# ln -s /opt/zookeeper-3.4.11/ /opt/zookeeper

[root@elk01 software]# mkdir -p /data/zookeeper
[root@elk01 software]# cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

[root@elk01 software]# grep "^[a-Z]" /opt/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=10.96.211.209:2888:3888
server.2=10.96.211.110:2888:3888
server.3=10.96.211.111:2888:3888

 

[root@elk01 software]# echo "1" > /data/zookeeper/myid
[root@elk01 software]# cat /data/zookeeper/myid
1

 

第2台主机和第3台主机

在第1台主机上进行操作,直接拷贝给第2台和第3台主机

[root@elk01 opt]# scp -r zookeeper* elk02:/opt/

[root@elk01 opt]# scp -r zookeeper* elk03:/opt/

然后第2台主机在做如下操作: 

[root@elk02 software]# echo "2" > /data/zookeeper/myid
[root@elk02 software]# cat /data/zookeeper/myid
2

 

最后第3台主机在做如下操作

[root@elk03 software]# echo "3" > /data/zookeeper/myid
[root@elk03 software]# cat /data/zookeeper/myid
3

 

 c. 各节点启动zookeeper

节点1:

[root@elk01 software]# /opt/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

 

节点2:

[root@elk02 software]# /opt/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

 

节点3:

[root@elk03 software]# /opt/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

 

d. 查看各个节点的zookeeper状态

节点1

[root@elk01 opt]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

节点2

[root@elk02 zookeeper]# /opt/zookeeper/bin/zkServer.sh status

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

节点3

[root@elk03 zookeeper]# /opt/zookeeper/bin/zkServer.sh status

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader

 

e.  zookeeper基本操作

连接到任意节点生成数据:我们在节点1生成数据,然后在其他节点查看验证数据: 

[root@elk01 opt]# /opt/zookeeper/bin/zkCli.sh -server elk01:2181
Connecting to elk01:2181
2022-02-11 15:04:57,730 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT
2022-02-11 15:04:57,732 [myid:] - INFO [main:Environment@100] - Client environment:host.name=elk01
2022-02-11 15:04:57,732 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_312
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Red Hat, Inc.
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/opt/zookeeper/bin/../build/classes:/opt/zookeeper/bin/../build/lib/*.jar:/opt/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/opt/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/opt/zookeeper/bin/../lib/log4j-1.2.16.jar:/opt/zookeeper/bin/../lib/jline-0.9.94.jar:/opt/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/opt/zookeeper/bin/../zookeeper-3.4.11.jar:/opt/zookeeper/bin/../src/java/lib/*.jar:/opt/zookeeper/bin/../conf:
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-1160.el7.x86_64
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2022-02-11 15:04:57,734 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/opt
2022-02-11 15:04:57,735 [myid:] - INFO [main:ZooKeeper@441] - Initiating client connection, connectString=elk01:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@68de145
2022-02-11 15:04:57,747 [myid:] - INFO [main-SendThread(elk01:2181):ClientCnxn$SendThread@1035] - Opening socket connection to server elk01/10.96.211.209:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2022-02-11 15:04:57,788 [myid:] - INFO [main-SendThread(elk01:2181):ClientCnxn$SendThread@877] - Socket connection established to elk01/10.96.211.209:2181, initiating session
2022-02-11 15:04:57,815 [myid:] - INFO [main-SendThread(elk01:2181):ClientCnxn$SendThread@1302] - Session establishment complete on server elk01/10.96.211.209:2181, sessionid = 0x100015eb5d20000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: elk01:2181(CONNECTED) 0] create /test "hello"
Created /test

 

在其他节点上查看验证数据:连接节点2 zookeeper查看

[root@elk02 zookeeper]# /opt/zookeeper/bin/zkCli.sh -server elk02:2181
Connecting to elk02:2181
2022-02-11 15:06:09,783 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT
2022-02-11 15:06:09,786 [myid:] - INFO [main:Environment@100] - Client environment:host.name=elk02
2022-02-11 15:06:09,786 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_312
2022-02-11 15:06:09,789 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Red Hat, Inc.
2022-02-11 15:06:09,789 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/opt/zookeeper/bin/../build/classes:/opt/zookeeper/bin/../build/lib/*.jar:/opt/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/opt/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/opt/zookeeper/bin/../lib/log4j-1.2.16.jar:/opt/zookeeper/bin/../lib/jline-0.9.94.jar:/opt/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/opt/zookeeper/bin/../zookeeper-3.4.11.jar:/opt/zookeeper/bin/../src/java/lib/*.jar:/opt/zookeeper/bin/../conf:
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-1160.el7.x86_64
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2022-02-11 15:06:09,790 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/opt/zookeeper
2022-02-11 15:06:09,791 [myid:] - INFO [main:ZooKeeper@441] - Initiating client connection, connectString=elk02:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@68de145
2022-02-11 15:06:09,810 [myid:] - INFO [main-SendThread(elk02:2181):ClientCnxn$SendThread@1035] - Opening socket connection to server elk02/10.96.211.110:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2022-02-11 15:06:09,865 [myid:] - INFO [main-SendThread(elk02:2181):ClientCnxn$SendThread@877] - Socket connection established to elk02/10.96.211.110:2181, initiating session
2022-02-11 15:06:09,887 [myid:] - INFO [main-SendThread(elk02:2181):ClientCnxn$SendThread@1302] - Session establishment complete on server elk02/10.96.211.110:2181, sessionid = 0x200015cabf00000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: elk02:2181(CONNECTED) 0] get /test
hello
cZxid = 0x100000002
ctime = Fri Feb 11 15:05:27 CST 2022
mZxid = 0x100000002
mtime = Fri Feb 11 15:05:27 CST 2022
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

 

在其他节点上查看验证数据:连接节点3 zookeeper查看

[root@elk03 zookeeper]# /opt/zookeeper/bin/zkCli.sh -server elk03:2181
Connecting to elk03:2181
2022-02-11 15:07:08,968 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT
2022-02-11 15:07:08,970 [myid:] - INFO [main:Environment@100] - Client environment:host.name=elk03
2022-02-11 15:07:08,970 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_312
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Red Hat, Inc.
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/opt/zookeeper/bin/../build/classes:/opt/zookeeper/bin/../build/lib/*.jar:/opt/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/opt/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/opt/zookeeper/bin/../lib/log4j-1.2.16.jar:/opt/zookeeper/bin/../lib/jline-0.9.94.jar:/opt/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/opt/zookeeper/bin/../zookeeper-3.4.11.jar:/opt/zookeeper/bin/../src/java/lib/*.jar:/opt/zookeeper/bin/../conf:
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-1160.el7.x86_64
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2022-02-11 15:07:08,972 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/opt/zookeeper
2022-02-11 15:07:08,973 [myid:] - INFO [main:ZooKeeper@441] - Initiating client connection, connectString=elk03:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@68de145
Welcome to ZooKeeper!
2022-02-11 15:07:08,987 [myid:] - INFO [main-SendThread(elk03:2181):ClientCnxn$SendThread@1035] - Opening socket connection to server elk03/10.96.211.111:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2022-02-11 15:07:09,027 [myid:] - INFO [main-SendThread(elk03:2181):ClientCnxn$SendThread@877] - Socket connection established to elk03/10.96.211.111:2181, initiating session
2022-02-11 15:07:09,040 [myid:] - INFO [main-SendThread(elk03:2181):ClientCnxn$SendThread@1302] - Session establishment complete on server elk03/10.96.211.111:2181, sessionid = 0x300015c8faa0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: elk03:2181(CONNECTED) 0] get /test
hello
cZxid = 0x100000002
ctime = Fri Feb 11 15:05:27 CST 2022
mZxid = 0x100000002
mtime = Fri Feb 11 15:05:27 CST 2022
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0 

 

f. 安装配置Kafka集群

    安装3台Kafka集群

第1台主机:

[root@elk01 software]# pwd
/opt/software
[root@elk01 software]# tar zxf kafka_2.11-1.0.0.tgz -C /opt/

[root@elk01 software]# ln -s /opt/kafka_2.11-1.0.0/ /opt/kafka

[root@elk01 software]# mkdir /opt/kafka/logs

[root@elk01 software]# cat /opt/kafka/config/server.properties
broker.id=1
listeners=PLAINTEXT://10.96.211.209:9092
log.dirs=/opt/kafka/logs
log.retention.hours=24
zookeeper.connect=10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181

 

第2台和第3台主机:

    在第1台主机进行操作,直接解压后的kafka目录 拷贝给第2台和第3台主机

  

[root@elk01 opt]# pwd
/opt

[root@elk01 opt]# scp -r kafka* elk02:/opt/

[root@elk01 opt]# scp -r kafka* elk03:/opt/

修改第2台主机有关配置文件,创建日志目录

[root@elk02 opt]# cat /opt/kafka/config/server.properties
broker.id=2
listeners=PLAINTEXT://10.96.211.110:9092
log.dirs=/opt/kafka/logs
log.retention.hours=24
zookeeper.connect=10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181

[root@elk02 opt]# mkdir /opt/kafka/logs

 

修改第3台主机有关配置文件,创建日志目录

[root@elk03 zookeeper]# cat /opt/kafka/config/server.properties
broker.id=3
listeners=PLAINTEXT://10.96.211.111:9092
log.dirs=/opt/kafka/logs
log.retention.hours=24
zookeeper.connect=10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181

[root@elk03 zookeeper]# mkdir /opt/kafka/logs

 

    各节点启动kafka

节点1

[root@elk01 opt]# /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

[root@elk01 opt]# tail -f /opt/kafka/logs/server.log
[2022-02-11 16:18:25,168] INFO [ProducerId Manager 1]: Acquired new producerId block (brokerId:1,blockStartProducerId:1000,blockEndProducerId:1999) by writing to Zk with path version 2 (kafka.coordinator.transaction.ProducerIdManager)
[2022-02-11 16:18:25,178] INFO [TransactionCoordinator id=1] Starting up. (kafka.coordinator.transaction.TransactionCoordinator)
[2022-02-11 16:18:25,179] INFO [TransactionCoordinator id=1] Startup complete. (kafka.coordinator.transaction.TransactionCoordinator)
[2022-02-11 16:18:25,182] INFO [Transaction Marker Channel Manager 1]: Starting (kafka.coordinator.transaction.TransactionMarkerChannelManager)
[2022-02-11 16:18:25,240] INFO Creating /brokers/ids/1 (is it secure? false) (kafka.utils.ZKCheckedEphemeral)
[2022-02-11 16:18:25,248] INFO Result of znode creation is: OK (kafka.utils.ZKCheckedEphemeral)
[2022-02-11 16:18:25,249] INFO Registered broker 1 at path /brokers/ids/1 with addresses: EndPoint(10.96.211.209,9092,ListenerName(PLAINTEXT),PLAINTEXT) (kafka.utils.ZkUtils)
[2022-02-11 16:18:25,257] INFO Kafka version : 1.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2022-02-11 16:18:25,257] INFO Kafka commitId : aaa7af6d4a11b29d (org.apache.kafka.common.utils.AppInfoParser)
[2022-02-11 16:18:25,259] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)

 

节点2

[root@elk02 opt]# /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
[root@elk02 opt]# tail -f /opt/kafka/logs/server.log
[2022-02-11 16:24:06,305] INFO [TransactionCoordinator id=2] Starting up. (kafka.coordinator.transaction.TransactionCoordinator)
[2022-02-11 16:24:06,309] INFO [Transaction Marker Channel Manager 2]: Starting (kafka.coordinator.transaction.TransactionMarkerChannelManager)
[2022-02-11 16:24:06,309] INFO [TransactionCoordinator id=2] Startup complete. (kafka.coordinator.transaction.TransactionCoordinator)
[2022-02-11 16:24:06,404] INFO Creating /brokers/ids/2 (is it secure? false) (kafka.utils.ZKCheckedEphemeral)
[2022-02-11 16:24:06,424] INFO Result of znode creation is: OK (kafka.utils.ZKCheckedEphemeral)
[2022-02-11 16:24:06,427] INFO Registered broker 2 at path /brokers/ids/2 with addresses: EndPoint(10.96.211.110,9092,ListenerName(PLAINTEXT),PLAINTEXT) (kafka.utils.ZkUtils)
[2022-02-11 16:24:06,435] WARN No meta.properties file under dir /opt/kafka/logs/meta.properties (kafka.server.BrokerMetadataCheckpoint)
[2022-02-11 16:24:06,485] INFO Kafka version : 1.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2022-02-11 16:24:06,485] INFO Kafka commitId : aaa7af6d4a11b29d (org.apache.kafka.common.utils.AppInfoParser)
[2022-02-11 16:24:06,489] INFO [KafkaServer id=2] started (kafka.server.KafkaServer)

 

节点3

[root@elk03 zookeeper]# /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
You have new mail in /var/spool/mail/root
[root@elk03 zookeeper]# tail -f /opt/kafka/logs/server.log
[2022-02-11 16:25:11,076] INFO [TransactionCoordinator id=3] Starting up. (kafka.coordinator.transaction.TransactionCoordinator)
[2022-02-11 16:25:11,077] INFO [Transaction Marker Channel Manager 3]: Starting (kafka.coordinator.transaction.TransactionMarkerChannelManager)
[2022-02-11 16:25:11,077] INFO [TransactionCoordinator id=3] Startup complete. (kafka.coordinator.transaction.TransactionCoordinator)
[2022-02-11 16:25:11,105] INFO Creating /brokers/ids/3 (is it secure? false) (kafka.utils.ZKCheckedEphemeral)
[2022-02-11 16:25:11,115] INFO Result of znode creation is: OK (kafka.utils.ZKCheckedEphemeral)
[2022-02-11 16:25:11,116] INFO Registered broker 3 at path /brokers/ids/3 with addresses: EndPoint(10.96.211.111,9092,ListenerName(PLAINTEXT),PLAINTEXT) (kafka.utils.ZkUtils)
[2022-02-11 16:25:11,118] WARN No meta.properties file under dir /opt/kafka/logs/meta.properties (kafka.server.BrokerMetadataCheckpoint)
[2022-02-11 16:25:11,143] INFO Kafka version : 1.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2022-02-11 16:25:11,144] INFO Kafka commitId : aaa7af6d4a11b29d (org.apache.kafka.common.utils.AppInfoParser)
[2022-02-11 16:25:11,145] INFO [KafkaServer id=3] started (kafka.server.KafkaServer)

 

     测试验证kafka

创建名为kafkatest,partitions(分区)为3,replication(复制)为3的topic(主题),在任意机器操作都可以。

我在节点1测试创建:

[root@elk01 opt]# /opt/kafka/bin/kafka-topics.sh --create --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --partitions 3 --replication-factor 3 --topic kafkatest
Created topic "kafkatest".

可以在任意1台主机进行测试

节点1:

[root@elk01 opt]# /opt/kafka/bin/kafka-topics.sh --describe --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --topic kafkatest Topic:kafkatest PartitionCount:3 ReplicationFactor:3 Configs:

Topic: kafkatest Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
Topic: kafkatest Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: kafkatest Partition: 2 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1

节点2:

[root@elk02 opt]# /opt/kafka/bin/kafka-topics.sh --describe --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --topic kafkatest Topic:kafkatest
Topic:kafkatest PartitionCount:3 ReplicationFactor:3 Configs:
Topic: kafkatest Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
Topic: kafkatest Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: kafkatest Partition: 2 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1

节点3:

[root@elk03 zookeeper]# /opt/kafka/bin/kafka-topics.sh --describe --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --topic kafkatest Topic:kafkatest
Topic:kafkatest PartitionCount:3 ReplicationFactor:3 Configs:
Topic: kafkatest Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
Topic: kafkatest Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: kafkatest Partition: 2 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1

 

    kafka测试发送消息

kafka测试发送消息:在节点1发消息,在其它节点都能收到

节点1:

[root@elk01 opt]# /opt/kafka/bin/kafka-topics.sh --create --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --partitions 3 --replication-factor 3 --topic messagetest
Created topic "messagetest".

 

[root@elk01 opt]# /opt/kafka/bin/kafka-console-producer.sh --broker-list 10.96.211.209:9092,10.96.211.110:9092,10.96.211.111:9092 --topic messagetest
>hello
>ron
>

节点2:

[root@elk02 opt]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --topic messagetest --from-beginning
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
hello
ron

节点3:

[root@elk03 zookeeper]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --topic messagetest --from-beginning
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
hello
ron

节点2和节点3退出重新登录,还能重新看到收到历史消息记录:

[root@elk02 opt]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --topic messagetest --from-beginning
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
ron
hello

 

[root@elk03 zookeeper]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --topic messagetest --from-beginning
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
hello
ron
^CProcessed a total of 2 messages
You have new mail in /var/spool/mail/root
[root@elk03 zookeeper]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper 10.96.211.209:2181,10.96.211.110:2181,10.96.211.111:2181 --topic messagetest --from-beginning
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
ron
hello

 

3.使用kafka作为缓存存储日志 

1)配置filebeat

filebeat配置文件配置后的内容如下:

[root@elk01 logs]# cat /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["access"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["error"]


setup.kibana:
  host: "10.96.211.209:5601"

output.kafka:
  hosts: ["10.96.211.209:9092","10.96.211.110:9092","10.96.211.111:9092"]
  topic: elklog

 

2)安装和配置logstash

[root@elk01 es_soft]# rpm -ivh logstash-6.6.0.rpm

  logstash配置文件不需要修改,主配置文件在/etc/logstash/conf.d里。

[root@elk01 logs]# cat /etc/logstash/conf.d/kafka.conf
input{
  kafka{
    bootstrap_servers=>"10.96.211.209:9092"
    topics=>["elklog"]
    group_id=>"logstash"
    codec => "json"
  }
}
filter {
  mutate {
    convert => ["upstream_time", "float"]                                                                                                                        
    convert => ["request_time", "float"]
  }
}
output {
    if "access" in [tags] {
      elasticsearch {
        hosts => "http://localhost:9200"
        manage_template => false
        index => "nginx_access-%{+yyyy.MM}"
      }
    }
    if "error" in [tags] {
      elasticsearch {
        hosts => "http://localhost:9200"
        manage_template => false
        index => "nginx_error-%{+yyyy.MM}"
      }
    }
}

3)启动logstash

[root@elk01 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/kafka.conf

4)重启filebeat

systemctl restart filebeat

5)模拟访问(造nginx日志)

ab -n 20000 -c 20  http://10.96.211.209/0214testhaha

6)查看kibana或者有关日志

 

 

posted on 2022-02-08 15:28  永远的大空翼  阅读(171)  评论(0编辑  收藏  举报