·
节点信息
hostname | IP | 软件 |
---|---|---|
elk-web | 10.0.30.30 | kibana-7.9.1、kafka-eagle-2.0.5、cerebro-0.9.4、mariadb-10.2.15 |
elk-kafka01 | 10.0.30.31 | zookeeper-3.4.13、kafka-2.12.1 |
elk-kafka02 | 10.0.30.32 | zookeeper-3.4.13、kafka-1.0.0 |
elk-kafka03 | 10.0.30.33 | zookeeper-3.4.13、kafka-1.0.0 |
elk-elasticsearch01 | 10.0.30.34 | elasticsearch-7.9.1 |
elk-elasticsearch02 | 10.0.30.35 | elasticsearch-7.9.1 |
elk-elasticsearch03 | 10.0.30.36 | elasticsearch-7.9.1 |
elk-logstash | 10.0.30.37 | logstash-7.9.1 |
·
架构图
·
搭建过程中遇到的问题
所有服务器采用的是双网卡,第一个网卡(eth0)走的是默认路由,第二个网卡(eth1)配置了静态路由。路由信息如下图:
初次搭建时,所有侦听地址使用的是 eth1,在进行到测试 kafka 集群的步骤时,发现连接 zookeeper 和 kafka 时会比较慢,偶尔还会出现连接失败的现象。在安装 kafka-eagle 的步骤时,一直启动失败,观察日志发现了大量连接 zookeeper 的超时报错,最后将所有侦听地址修改为 eth0 后,没有出现此状况。
疑虑:在同一个网段中调用,不应该不走网关吗?为什么会出现这种情况?难道和 xshell 是在 172.168.20.0/24 网段有关系?
由于网络方面的知识欠缺,就没有深入研究此种状况网络方面的原因和修复方法,如果有知道的小伙伴欢迎评论区留言,感谢!!!。
·
部署 Kafka 集群
官网:http://kafka.apache.org/
由于 Kafka 依赖 zookeeper,所以先部署一套 zookeeper 集群。
·
部署 Zookeeper 集群
官网:https://zookeeper.apache.org/
下载地址:https://archive.apache.org/dist/zookeeper/
·
PS:zookeeper 集群配置中,除了 myid 必须唯一以外,其余配置均可一致。
·
1 配置 Java 环境
tar -xvf jdk-8u281-linux-x64.tar.gz -C /usr/local/
ln -vs /usr/local/jdk1.8.0_281/bin/java* /usr/bin/
·
2 下载&解压 Zookeeper
tar -xvf zookeeper-3.4.13.tar.gz -C /usr/local/
·
3 设置 JVM 堆大小
cd /usr/local/zookeeper-3.4.13
vim conf/java.env
#添加
#!/bin/sh
export JVMFLAGS="-Xms2g -Xmx2g"
·
4 创建配置文件(文件名任意即可,启动时默认加载 conf/zoo.cfg)
vim conf/zoo.cfg
#主要关注以下配置
tickTime=2000
#允许follower连接并同步至leader的时间,以tickTime为单位
initLimit=5
#允许follower与Zookeeper同步的时间,以tickTime为单位
syncLimit=2
#数据快照存储位置
dataDir=/data/zookeeper/zkdata/
#事务日志存储位置
dataLogDir=/data/zookeeper/zklog/
#侦听端口
clientPort=2181
#自动清除168小时之前的快照和事务日志
autopurge.purgeInterval=168
#zookeeper 集群组
server.31=10.0.30.31:2888:3888
server.32=10.0.30.32:2888:3888
server.33=10.0.30.33:2888:3888
·
5 创建依赖目录
mkdir -p /data/zookeeper/zkdata/ /data/zookeeper/zklog/
·
6 编辑 myid 文件
注意: myid 文件位于服务器的数据目录(dataDir)中,它由一行仅包含该机器的 id 文本组成。server.1 的 myid 将只包含文本 1 而没有其他内容,id 在 zookeeper 集群中必须是唯一的,并且应该在 1 到 255 之间。
# elk-kafka01 的 myid
echo 31 > /data/zookeeper/zkdata/myid
# elk-kafka02 的 myid
echo 32 > /data/zookeeper/zkdata/myid
# elk-kafka03 的 myid
echo 33 > /data/zookeeper/zkdata/myid
·
7 启动 Zookeeper
cd /usr/local/zookeeper-3.4.13
#./bin/zkServer.sh start conf/zoo.cfg
./bin/zkServer.sh start
#停止:./bin/zkServer.sh stop
·
8 验证 zk 集群是否成功
# 查看状态
./bin/zkServer.sh status
PS: 只启动第一个 zk 节点(myid 31),查看状态会提示 "Error contacting service. It is probably not running."
;启动第二个 zk 节点(myid 32)后,查看状态会发现它的状态为 leader,这时返回查看第一个 zk 节点的状态会发现它的状态变为 follower;最后启动第三个 zk 节点(myid 33),查看状态会发现它的状态为 follower。当 leader 故障后,第三个节点会变为新 leader。
·
开始安装 Kafka
PS:kafka 集群配置中,除了 broker.id 和侦听地址(listeners)不相同外,其余配置均可一致。
·
1 配置 Java 环境
步骤忽略…。部署 zookeeper 集群时,已经配置。
·
2 下载&解压 Kafka
tar -xvf kafka_2.12-1.0.0.tgz -C /usr/local/
·
3 修改配置文件
cd /usr/local/kafka_2.12-1.0.0
vim config/server.properties
#### 主要修改以下配置 ####
#代理 ID,集群内唯一
broker.id=31
#侦听地址
listeners=PLAINTEXT://10.0.30.31:9092
#数据存储位置
log.dirs=/data/kafka/kkdata
#每个主题的默认日志分区数(这里3个节点,设置3个分区)
num.partitions=3
#zookeeper 集群列表
zookeeper.connect=10.0.30.31:2181,10.0.30.32:2181,10.0.30.33:2181
#### 下面的配置需要手动添加 ####
#开启自动创建主题
auto.create.topics.enable=true
#开启删除主题功能
delete.topic.enable=true
#最小副本数。此值大于 1 时,使用 --bootstrap-server 无法消费,会报错。
#+ 因为 kafka 生成的 __consumer_offsets 主题的副本数为 1。
min.insync.replicas=1
#并发数
queued.max.requests=500
#主题的默认副本数
default.replication.factor=2
#如果在这段时间内,follower没有同步leader的数据,那么将此follower从isr中删除
replica.lag.time.max.ms=10000
·
4 JVM 优化
官方建议使用最新发布的 JDK 1.8 版本,因为较旧的免费可用版本已经披露了安全漏洞。如果您决定使用 G1 收集器(当前的默认值),并且您仍然使用 JDK 1.7,请确保您使用的是 u51 或更新版本。
vim bin/kafka-server-start.sh
#修改
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi
# 改为
...
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
# 官方测试的最大堆为:-Xmx6g,初始化堆为:-Xms6g
export KAFKA_HEAP_OPTS="-Xmx4g -Xms4g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"
#JMX 端口供 kafka eagle 监控使用
export JMX_PORT="8888"
fi
...
·
5 创建依赖路径
mkdir -p /data/kafka/kkdata
·
6 启动
./bin/kafka-server-start.sh -daemon config/server.properties
# -daemon:以守护进程方式启动
·
7 验证 Kafka 集群是否正常
# 创建 test 主题
bin/kafka-topics.sh --zookeeper 10.0.30.31:2181,10.0.30.32:2181,10.0.30.33:2181 \
--create \
--partitions 3 \
--replication-factor 2 \
--topic test
# 查看 test 主题详细信息
bin/kafka-topics.sh --describe \
--zookeeper 10.0.30.31:2181,10.0.30.32:2181,10.0.30.33:2181 \
--topic test
Topic:test PartitionCount:3 ReplicationFactor:2 Configs:
Topic: test Partition: 0 Leader: 31 Replicas: 31,32 Isr: 31,32
Topic: test Partition: 1 Leader: 32 Replicas: 32,33 Isr: 32,33
Topic: test Partition: 2 Leader: 33 Replicas: 33,31 Isr: 33,31
# 为 test 主题生产数据
bin/kafka-console-producer.sh