内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
风哥提示:
本文档介绍企业级消息队列部署综合实战案例。
Part01-Kafka集群部署
1.1 Kafka安装配置
[root@fgedu-kafka1 ~]# yum install -y java-11-openjdk zookeeper
# 配置ZooKeeper
[root@fgedu-kafka1 ~]# cat > /etc/zookeeper/zoo.cfg << 'EOF'
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=192.168.1.10:2888:3888
server.2=192.168.1.11:2888:3888
server.3=192.168.1.12:2888:3888
EOF
[root@fgedu-kafka1 ~]# echo "1" > /var/lib/zookeeper/myid
[root@fgedu-kafka1 ~]# systemctl enable zookeeper –now
# 下载Kafka
[root@fgedu-kafka1 ~]# wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
[root@fgedu-kafka1 ~]# tar xzf kafka_2.13-3.6.0.tgz -C /usr/local/
[root@fgedu-kafka1 ~]# ln -s /usr/local/kafka_2.13-3.6.0 /usr/local/kafka
# 配置Kafka
[root@fgedu-kafka1 ~]# cat > /usr/local/kafka/config/server.properties << 'EOF'
broker.id=1
listeners=PLAINTEXT://192.168.1.10:9092
advertised.listeners=PLAINTEXT://192.168.1.10:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/var/lib/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=2
log.学习交流加群风哥微信: itpux-comretention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.1.10:2181,192.168.1.11:2181,192.168.1.12:2181
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
EOF
# 启动Kafka
[root@fgedu-kafka1 ~]# /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
# 创建Topic
[root@fgedu-kafka1 ~]# /usr/local/kafka/bin/kafka-topics.sh --create \
--bootstrap-server 192.168.1.10:9092 \
--replication-factor 3 \
--partitions 3 \
--topic fgedu-events
Created topic fgedu-events.
# 查看Topic
[root@fgedu-kafka1 ~]# /usr/local/kafka/bin/kafka-topics.sh --list --bootstrap-server 192.168.1.10:9092
fgedu-events
Part02-Kafka生产消费
2.1 消息生产与消费
[root@fgedu-kafka1 ~]# /usr/local/kafka/bin/kafka-console-producer.sh \
–bootstrap-server 192.168.1.10:9092 \
–topic fgedu-events
>Hello Kafka from FGEDU
>This is a test message
>Welcome to Linux tutorial
# 消费消息
[root@fgedu-kafka1 ~]# /usr/local/kafka/bin/kafka-console-consumer.sh \
–bootstrap-server 192.168.1.10:9092 \
–topic fgedu-events \
–from-beginning
Hello Kafka from FGEDU
This is a test message
Welcome to Linux tutorial
# 查看消费者组
[root@fgedu-kafka1 ~]# /usr/local/kafka/bin/kafka-consumer-groups.sh \
–bootstrap-server 192.168.1.更多视频教程www.fgedu.net.cn10:9092 \
–list
fgedu-consumer-group
# 查看消费者组详情
[root@fgedu-kafka1 ~]# 学习交流加群风哥QQ113257174/usr/local/kafka/bin/kafka-consumer-groups.sh \
–bootstrap-server 192.168.1.10:9092 \
–describe \
–group fgedu-consumer-group
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG
fgedu-consumer-group fgedu-events 0 10 10 0
fgedu-consumer-group fgedu-events 1 15 15 0
fgedu-consumer-group fgedu-events 2 12 12 0
# Python生产者示例
[root@fgedu-app ~]# pip install kafka-python
[root@fgedu-app ~]# cat > producer.py << 'EOF'
from kafka import KafkaProducer
import json
producer = KafkaProducer(
bootstrap_servers=['192.168.1.10:9092'],
value_serializer=lambda v: json.dumps(v).encode('utf-8')
)
for i in range(10):
producer.send('fgedu-events', {'id': i, 'message': f'Event {i}'})
print(f'Sent message {i}')
producer.flush()
producer.close()
EOF
[root@fgedu-app ~]# python3 producer.py
Sent message 0
Sent message 1
Sent message 2
...
Sent message 9
Part03-RabbitMQ部署
3.1 RabbitMQ集群配置
[root@fgedu-rabbit1 ~]# yum install -y rabbitmq-server
# 启动RabbitMQ
[root@fgedu-rabbit1 ~]# systemctl enable rabbitmq-server –now
# 启用管理插件
[root@fgedu-rabbit1 ~]# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@fgedu-rabbit1:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@fgedu-rabbit1…
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
started 3 plugins.
# 创建用户
[root@fgedu-rabbit1 ~]# rabbitmqctl add_user fgedu Fgedu@123
Adding user “fgedu” …
Done. Don’t forget to grant the user permissions to some virtual hosts! See ‘rabbitmqctl set_permissions –help’.
[root@fgedu-rabbit1 ~]# rabbitmqctl set_user_tags fgedu administrator
Setting tags for user “fgedu” to [administrator] …
[root@fgedu-rabbit1 ~]# rabbitmqctl set_permissions -p / fgedu “.*” “.*” “.*”
Setting permissions for user “fgedu” in vhost “/” …
# 配置集群
[root@fgedu-rabbit1 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@fgedu-rabbit1 …
[root@fgedu-rabbit2 ~]# rabbitmqctl stop_app
[root@fgedu-rabbit2 ~]# rabbitmqctl join_cluster rabbit@fgedu-rabbit1
Clustering node rabbit@fgedu-rabbit2 with rabbit@fgedu-rabbit1
[root@fgedu-rabbit2 ~]# rabbitmqctl start_app
Starting node rabbit@fgedu-rabbit2 …
# 查看集群状态
[root@fgedu-rabbit1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@fgedu-rabbit1 …
Basics
Cluster name: rabbit@fgedu-rabbit1
Disk Nodes
rabbit@fgedu-rabbit1
rabbit@fgedu-rabbit2
Running Nodes
rabbit@fgedu-rabbit1
rabbit@fgedu-rabbit2
Versions
rabbit@fgedu-rabbit1: RabbitMQ 3.12.0 on Erlang 25.3
rabbit@fgedu-rabbit2: RabbitMQ 3.12.0 on Erlang 25.3
Part04-消息队列监控
4.1 监控配置
[root@fgedu-kafka1 ~]# cat > /usr/local/kafka/config/jmx_prometheus.yml << 'EOF' lowercaseOutputName: true rules: - pattern: 'kafka.([^<]+)<>([^:]+):’
name: kafka_$1_$2
type: GAUGE
labels:
topic: “$2″
EOF
# 启用JMX Exporter
[root@fgedu-kafka1 ~]# export KAFKA_OPTS=”-javaagent:/usr/local/jmx_prometheus_javaagent.jar=7071:/usr/local/kafka/config/jmx_prometheus.yml”
# 配置Prometheus
[root@fgedu-prometheus ~]# cat >> /etc/prometheus/prometheus.yml << 'EOF'
- job_name: 'kafka'
static_configs:
- targets:
- '192.168.1.10:7071'
- '192.168.1.11:7071'
- '192.168.1.12:7071'
- job_name: 'rabbitmq'
static_configs:
- targets:
- '192.168.1.20:15692'
- '192.168.1.21:15692'
EOF
# 创建告警规则
[root@fgedu-prometheus ~]# cat > /etc/prometheus/rules/mq.yml << 'EOF'
groups:
- name: kafka_alerts
rules:
- alert: KafkaConsumerLag
expr: kafka_consumer_group_lag > 1000
for: 5m
labels:
severity: warning
annotations:
summary: “Kafka消费延迟过高”
description: “消费者组 {{ $labels.group }} 延迟超过1000条消息”
– alert: KafkaOfflinePartitions
expr: kafka_controller_offline_partitions_count > 0
for: 1m
labels:
severity: critical
annotations:
summary: “Kafka分区离线”
description: “存在 {{ $value }} 个离线分区”
– name: rabbitmq_alerts
rules:
– alert: RabbitMQQueueHigh
expr: rabbitmq_queue_messages > 10000
for: 5m
labels:
severity: warning
annotations:
summary: “RabbitMQ队列消息堆积”
description: “队列 {{ $labels.queue }} 消息数超过10000”
– alert: RabbitMQNodeDown
expr: rabbitmq_up == 0
for: 1m
labels:
severity: critical
annotations:
summary: “RabbitMQ节点宕机”
description: “节点 {{ $labels.instance }} 已宕机”
EOF
- 配置高可用集群
- 合理设置分区和副本
- 监控消费延迟
- 配置消息持久化
- 建立消息重试机制
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
