1. 首页 > Linux教程 > 正文

Linux教程FG503-Linux综合实战案例九

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

风哥提示:

本文档介绍企业级消息队列部署综合实战案例。

Part01-Kafka集群部署

1.1 Kafka安装配置

# 安装Java和ZooKeeper
[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集群配置

# 安装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 监控配置

# 配置Kafka监控
[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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息