ELFK + kafka 架构部署
集群部署
添加3台主机
[root@server6 ~]# vim /etc/hosts
每台主机都要配置解析

三台主机配置JDK环境
[root@server6 ~]# rpm -ivh jdk-17.0.17_linux-x64_bin.rpm
[root@server7 ~]# rpm -ivh jdk-17.0.17_linux-x64_bin.rpm
[root@server8 ~]# rpm -ivh jdk-17.0.17_linux-x64_bin.rpm
三台主机安装 Kafka
[root@server6 ~]# tar zxf kafka_2.12-3.9.1.tgz -C /opt
[root@server6 ~]# mv /opt/kafka_2.12-3.9.1 /opt/kafka
[root@server6 ~]# cd /opt/kafka/config/kraft
[root@server6 kraft]# cp server.properties{,.bak} #备份配置文件
[root@server6 kraft]# mkdir /opt/kafka/logs #日志目录
三台主机 Kafka 配置文件修改
server6配置文件修改
[root@server6 ~]# cd /opt/kafka/config/kraft
[root@server6 kraft]# vim server.properties
process.roles=broker,controller
node.id=137
controller.quorum.voters=137@192.168.247.137:9093,138@192.168.247.138:9093,139@192.168.247.139:9093
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://192.168.247.137:9092,CONTROLLER://192.168.247.137:9093
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
num.network.threads=2
num.io.threads=2
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/kafka/logs
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
server7配置文件修改

server8配置文件修改

Kafka 集群初始化
server6 节点生成储目录唯一的 UUID
[root@server6 kraft]# KAFKA_CLUSTER_ID="$(/opt/kafka/bin/kafka-storage.sh random-uuid)"
[root@server6 kraft]# echo ${KAFKA_CLUSTER_ID}
5RipyJmTTRGgHql-85cFnQ
三台主机用该 uuid 格式化 kafka 存储目录
[root@server6 kraft]# /opt/kafka/bin/kafka-storage.sh format -t 5RipyJmTTRGgHql-85cFnQ -c /opt/kafka/config/kraft/server.properties
[root@server7 kraft]# /opt/kafka/bin/kafka-storage.sh format -t 5RipyJmTTRGgHql-85cFnQ -c /opt/kafka/config/kraft/server.properties
[root@server8 kraft]# /opt/kafka/bin/kafka-storage.sh format -t 5RipyJmTTRGgHql-85cFnQ -c /opt/kafka/config/kraft/server.properties
三台节点启动 Kafka
[root@server6 kraft]# /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
[root@server6 kraft]# jps
40068 Jps
39847 Kafka
[root@server7 kraft]# /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
[root@server7 kraft]# jps
25150 Kafka
25278 Jps
[root@server8 kraft]# /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
[root@server8 kraft]# jps
25535 Kafka
25663 Jps
Kafka 集群可用性验证
Kafka 集群任意节点创建 Topic
[root@server6 kraft]# /opt/kafka/bin/kafka-topics.sh --create --topic testtopics --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3

--replication-factor 3:设置主题的副本因子为 3,即每个分区的副本数量为 3。副本用于数据冗余和高可用性,副本数需不能超过集群中 Broker 的总数。
--partitions 3:设置主题的分区数为 3。分区是 Kafka 并行处理消息的基本单位,影响吞吐量和扩展性。分区数一旦创建不可减少。
Kafka 集群任意节点查看 Topic
[root@server7 kraft]# /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092

Kafka 集群任意节点生产者测试
[root@server6 kraft]# /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testtopics

Kafka 集群任意节点查看主题
[root@server8 kraft]# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopics --from-beginning

Kafka 集群任意节点查看 topic 详细信息
[root@server7 kraft]# /opt/kafka/bin/kafka-topics.sh --bootstrap-server server6:9092,server7:9092,server8:9092 --topic testtopics --describe

FIlebeat 配置文件修改
[root@server4 ~]# vim /etc/filebeat/filebeat.yml
#----------------------------- Kafka output --------------------------------
output.kafka:
hosts: ["192.168.247.137:9092", "192.168.247.138:9092", "192.168.247.139:9092"]
# Kafka 集群地址
topic: "apache-logs" # 发送到的 Topic 名称
partition.round_robin: # 日志按轮询方式分发到 Topic 各分区
reachable_only: true
required_acks: 1 # 至少 1 个副本确认接收(平衡可靠性和性能)
compression: gzip # 启用压缩,减少网络传输量
max_message_bytes: 1048576 # 单条消息最大 1MB

[root@server4 ~]# filebeat test config -c /etc/filebeat/filebeat.yml
[root@server4 ~]# filebeat test output -c /etc/filebeat/filebeat.yml

[root@server4 ~]# systemctl restart filebeat.service
Kafka 集群任意节点消费者测试
[root@server8 kraft]# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic apache-logs --from-beginning

Logstash 消费 Topic 消息
[root@server5 ~]# cd /etc/logstash/conf.d
[root@server5 conf.d]# vim kafka.conf
input {
kafka {
bootstrap_servers => "192.168.247.137:9092,192.168.247.138:9092,192.168.247.139:9092"
topics => ["apache-logs"] # 消费的 Topic
group_id => "logstash-consumer-group" # 消费者组 ID
consumer_threads => 3 # 消费线程数 = 分区数,最大化并行
auto_offset_reset => "earliest" # 从最早消息开始消费(避免丢失)
codec => "json"
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
stdout {}
elasticsearch {
hosts => ["192.168.247.132:9200","192.168.247.133:9200","192.168.247.134:9200"]
index => "apachelog-%{+YYYY.MM.dd}"
user => "elastic"
password => "westos"
}
}

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

[root@server1 ~]# ab -c1 -n 300 http://192.168.247.135/index.html
[root@server2 ~]# ab -c1 -n 200 http://192.168.247.135/index.html
[root@server3 ~]# ab -c1 -n 100 http://192.168.247.135/index.html

1725



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



