Files
ai-security-xdr/haobang-security-dm/upgrade-doc/v1/kafka/kafka-cluster-upgrade.sh
T
王绍宏 ce473b2c7d perf(syslog-consumer-rule): 非标日志改为单线程异步批量写入
- 非标写库结果不再参与 Kafka ACK
- 使用独立单线程和有界队列处理非标日志
- 非标数据按固定大小分批写入达梦
- 增加异步成功、失败和队列拒绝指标
- 补充异步解耦及批量写入测试

perf(syslog-consumer-rule): 按批次字段并集优化达梦批量写入

- 普通日志和告警日志按非空字段并集生成批写模板
- 为同批记录补齐缺失字段并绑定 NULL
- 使用 MyBatis ExecutorType.BATCH 复用 PreparedStatement
- 避免固定写入全部 373 个候选字段
- 非标日志保留固定 24 列多行批量写入
- 批量大小和非标队列容量默认调整为 500
- 补充字段并集与动态 SQL 一致性测试
2026-09-11 15:44:48 +08:00

89 lines
3.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# Kafka 集群只需在一台装有 Kafka CLI、能够访问集群的服务器上执行一次。
# 示例:
# export KAFKA_BIN=<现场Kafka客户端bin目录>
# export BOOTSTRAP=<现场broker1地址>:<端口>,<现场broker2地址>:<端口>
# export RAW_TOPIC=<现场原始Topic名称>
# export COMMAND_CONFIG=<现场client.properties路径> # 无认证时不设置
# ./kafka-cluster-upgrade.sh
# BOOTSTRAP 必须使用客户 Kafka 运维提供的地址;集群建议填写两个以上 broker。
: "${KAFKA_BIN:?请根据现场环境设置 KAFKA_BIN}"
: "${BOOTSTRAP:?请填写客户 Kafka 运维提供的 broker 地址和端口}"
: "${RAW_TOPIC:?请填写现场实际使用的原始 Topic 名称}"
TOPICS_CMD="${KAFKA_BIN}/kafka-topics.sh"
CONFIGS_CMD="${KAFKA_BIN}/kafka-configs.sh"
if [[ ! -x "${TOPICS_CMD}" ]] || [[ ! -x "${CONFIGS_CMD}" ]]; then
echo "ERROR: ${KAFKA_BIN} 下缺少 kafka-topics.sh 或 kafka-configs.sh" >&2
exit 1
fi
COMMON_ARGS=(--bootstrap-server "${BOOTSTRAP}")
if [[ -n "${COMMAND_CONFIG:-}" ]]; then
if [[ ! -r "${COMMAND_CONFIG}" ]]; then
echo "ERROR: 无法读取认证配置 ${COMMAND_CONFIG}" >&2
exit 1
fi
COMMON_ARGS+=(--command-config "${COMMAND_CONFIG}")
fi
echo "[1/4] 测试 Kafka 集群连接:${BOOTSTRAP}"
"${TOPICS_CMD}" "${COMMON_ARGS[@]}" --list >/dev/null
echo "[2/4] 读取原始 Topic:${RAW_TOPIC}"
RAW_INFO=$("${TOPICS_CMD}" "${COMMON_ARGS[@]}" --describe --topic "${RAW_TOPIC}")
printf '%s\n' "${RAW_INFO}"
PARTITIONS=$(printf '%s\n' "${RAW_INFO}" | awk '
/PartitionCount:/ {
for (i = 1; i <= NF; i++) if ($i == "PartitionCount:") { print $(i + 1); exit }
}
')
REPLICAS=$(printf '%s\n' "${RAW_INFO}" | awk '
/ReplicationFactor:/ {
for (i = 1; i <= NF; i++) if ($i == "ReplicationFactor:") { print $(i + 1); exit }
}
')
if [[ ! "${PARTITIONS}" =~ ^[1-9][0-9]*$ ]] || [[ ! "${REPLICAS}" =~ ^[1-9][0-9]*$ ]]; then
echo "ERROR: 无法读取原始 Topic 的分区数或副本数" >&2
exit 1
fi
echo "新 Topic 使用分区数=${PARTITIONS},副本数=${REPLICAS}"
SUFFIXES=("RETRY.1M" "RETRY.10M" "RETRY.1H" "DLT" "REPLAY")
RETENTIONS=(259200000 604800000 604800000 7776000000 604800000)
echo "[3/4] 创建或更新升级 Topic"
for i in 0 1 2 3 4; do
TOPIC="${RAW_TOPIC}.${SUFFIXES[$i]}"
RETENTION_MS="${RETENTIONS[$i]}"
echo "处理 ${TOPIC}"
"${TOPICS_CMD}" "${COMMON_ARGS[@]}" \
--create --if-not-exists \
--topic "${TOPIC}" \
--partitions "${PARTITIONS}" \
--replication-factor "${REPLICAS}" \
--config cleanup.policy=delete \
--config "retention.ms=${RETENTION_MS}"
"${CONFIGS_CMD}" "${COMMON_ARGS[@]}" \
--alter --entity-type topics --entity-name "${TOPIC}" \
--add-config "cleanup.policy=delete,retention.ms=${RETENTION_MS}"
done
echo "[4/4] 显示升级结果"
for SUFFIX in "${SUFFIXES[@]}"; do
"${TOPICS_CMD}" "${COMMON_ARGS[@]}" \
--describe --topic "${RAW_TOPIC}.${SUFFIX}"
done
echo "PASS: Kafka 集群 Topic 已创建或更新;未删除 Topic,未修改消费组 offset。"