大数据Kafka3.x之——Kafka3.3.0安装与使用(详细)

目录

前期准备

一、JDK的安装

1、安装jdk

2、配置Java环境变量

3、加载环境变量

4、进行校验

二、Kafka的环境搭建

1、Kafka的下载安装

2、生成集群ID

[3、配置 server.properties](#3、配置 server.properties)

4、集群分发

[5、 修改node.id与listeners](#5、 修改node.id与listeners)

6、创建启停脚本文件

[6.1 创建脚本文件授权](#6.1 创建脚本文件授权)

[6.2 集群启动脚本](#6.2 集群启动脚本)

[6.3 集群停止脚本](#6.3 集群停止脚本)

[6.4 集群状态查看](#6.4 集群状态查看)


前期准备

查看网卡:

配置静态IP

vi /etc/sysconfig/network-scripts/ifcfg-ens32 ---- 根据自己网卡设置。

设置主机名

hostnamectl --static set-hostname 主机名

例如:

hostnamectl --static set-hostname hadoop001

配置IP与主机名映射

vi /etc/hosts

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

配置免密登录

传送门

一、JDK的安装

1、安装jdk

在/opt/model中上传jdk包并解压

tar -zxvf jdk-8u151-linux-x64.tar.gz

重命名,方便配置环境变量,避免更换jdk版本修改配置文件

2、配置Java环境变量

|-------------|---------------------------------------------------|----------|
| 系统级(全局) | /etc/profile, /etc/bash.bashrc, /etc/bashrc | 对所有用户生效 |
| 用户级(个人) | ~/.bash_profile, ~/.bashrc, ~/.profile | 只对当前用户生效 |

|--------------------|------------------------|-----------------------|
| /etc/profile | ✅ 几乎所有 Linux/Unix 系统都有 | Ubuntu、CentOS、macOS 等 |
| /etc/bashrc | ✅ CentOS/RHEL 系统使用 | CentOS、RHEL、Fedora |
| /etc/bash.bashrc | ✅ Ubuntu 使用 | Ubuntu、Debian |
| ~/.bash_profile | ✅ 用户可创建 | 所有支持 Bash 的系统 |
| ~/.profile | ✅ Ubuntu 默认生成 | Ubuntu、Debian |
| ~/.bashrc | ✅ 用户级 shell 配置 | 所有支持 Bash 的系统 |

vi /etc/profile

export JAVA_HOME=/opt/module/java #此处是自己实际的Java安装路径

export CLASSPATH=.:\JAVA_HOME/lib/dt.jar:\\JAVA_HOME/lib/tools.jar

export PATH=\PATH:\\JAVA_HOME/bin

3、加载环境变量

source /etc/profile

验证环境变量是否生效:

env | grep HOME

env | grep PATH

4、进行校验

​​

二、Kafka的环境搭建

1、Kafka的下载安装

1.1. 下载

https://archive.apache.org/dist/Kafka/3.9.0/

​下载 kafka_2.12-3.9.0.tgz 安装包

1.2 上传

使用xshell上传到指定安装路径

此处是安装路径是**/opt/** module

​​

1.3 解压重命名

tar -xzvf kafka_2.12-3.9.0.tgz

mv kafka_2.12-3.9.0 kafak

1.4 配置环境变量

vi /etc/profile

#KAFKA_HOME

export KAFKA_HOME=/opt/module/kafka

export PATH=PATH:KAFKA_HOME/bin

1.5 加载环境变量

source /etc/profile

验证环境变量是否生效:

env | grep KAFKA_HOME

env | grep PATH

1.6检验安装

kafka-topics.sh --version

出现下图说明安装成功

​​

2、生成集群ID

#生成集群ID

#只在任意一台机器上执行(如 hadoop001)生成集群的唯一标识:

cd $KAFKA_HOME

bin/kafka-storage.sh random-uuid

3、配置 server.properties

vi $KAFKA_HOME/config**/kraft**/server.properties

# ==================== 角色配置 ====================

角色:同时作为Broker和Controller

#Broker 处理生产者/消费者的读写请求,存储数据分区

#Controller 管理集群元数据(主题、分区、副本等),负责选举和协调

process.roles=broker,controller

# ==================== 集群标识 ====================

生成的集群ID

cluster.id=xQrQLf04Tb6bDPTYXq-boQ

# ==================== 节点标识 =================== =

节点唯一ID(每台机器不同:1/2/3)

node.id=1

# ==================== Controller 集群 ====================

Controller投票者列表(三台机器保持一致)

controller.quorum.voters=1@hadoop001:9093,2@hadoop002:9093,3@hadoop003:9093

# ==================== 监听器配置 ====================

监听端口【关键】监听器必须为一行,同时包含 CONTROLLER 和 PLAINTEXT

listeners=PLAINTEXT://:9092,CONTROLLER://:9093

Controller 监听器名称(对应 listeners 中的 CONTROLLER)

controller.listener.names=CONTROLLER

inter.broker.listener.name=PLAINTEXT

对外公布的地址(每台机器不同)

advertised.listeners=PLAINTEXT://hadoop001:9092,CONTROLLER://hadoop001:9093

# ==================== 数据存储路径 ====================

log.dirs=/opt/module/kafka/data/kraft

# ==================== 分区和副本 ====================

num.partitions=3

offsets.topic.replication.factor=3

transaction.state.log.replication.factor=3

transaction.state.log.min.isr=2

4、创建日志目录

mkdir -p /opt/module/kafka/logs

5、集群分发

注意:在分发文前要做好三台机器的IP与主机名映射 /etc/hosts

进行分发文件

scp -r /opt/module/kafka root@hadoop002:/opt/module/

scp -r /opt/module/kafka root@hadoop003:/opt/module/

scp -r /etc/profile root@hadoop002:/etc/profile

scp -r /etc/profile root@hadoop003:/etc/profile

让三台机器文件生效

hadoop001: source /etc/profile

hadoop002: source /etc/profile

hadoop003: source /etc/profile

6、修改node.id与listeners

修改 hadoop002 和 hadoop003 上的 节点配置

#节点2配置 hadoop002

vi $KAFKA_HOME/config/kraft/server.properties

node.id=2

advertised.listeners=PLAINTEXT://hadoop002:9092

#节点3配置 hadoop003

vi $KAFKA_HOME/config/kraft/server.properties

node.id=3

advertised.listeners=PLAINTEXT://hadoop003:9092

7、格式化数据存储目录

for node in hadoop001 hadoop002 hadoop003;do

ssh hadoop001 "source /etc/profile && cd $KAFKA_HOME && bin/kafka-storage.sh format -t <集群ID> -c config/kraft/server.properties"

ssh hadoop002 "source /etc/profile && cd $KAFKA_HOME && bin/kafka-storage.sh format -t <集群ID> -c config/kraft/server.properties"

ssh hadoop003 "source /etc/profile && cd $KAFKA_HOME && bin/kafka-storage.sh format -t <集群ID> -c config/kraft/server.properties"

done

注意: <集群ID> 改为前面生成的集群ID 例如:

8、启动服务(每台节点 了解)

nohup /opt/module/kafka/bin/kafka-server-start.sh /opt/module/kafka/config/kraft/server.properties > /opt/module/kafka/logs/kafka-hadoop001.out 2>&1 &

nohup /opt/module/kafka/bin/kafka-server-start.sh /opt/module/kafka/config/kraft/server.properties > /opt/module/kafka/logs/kafka-hadoop002.out 2>&1 &

nohup /opt/module/kafka/bin/kafka-server-start.sh /opt/module/kafka/config/kraft/server.properties > /opt/module/kafka/logs/kafka-**hadoop003.**out 2>&1 &

9、集群验证状态

  • 查看进程jps | grep Kafka

  • 查看 Broker 状态

/opt/module/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server hadoop001:9092

  • 创建测试 Topic

/opt/module/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server hadoop001:9092 --partitions 3 --replication-factor 3

9、停止服务(每台节点 了解)

/opt/module/kafka/bin/kafka-server-stop.sh

10、创建集群启停脚本文件

10.1 创建脚本文件授权

touch $KAFKA_HOME/bin/kafka-cluster-start.sh

touch $KAFKA_HOME/bin/kafka-cluster-stop.sh

touch $KAFKA_HOME/bin/kafka-cluster-status.sh

chmod 777 $KAFKA_HOME/bin/kafka-cluster-start.sh

chmod 777 $KAFKA_HOME/bin/kafka-cluster-stop.sh

chmod 777 $KAFKA_HOME/bin/kafka-cluster-status.sh

8.2 集群启动脚本

vi $KAFKA_HOME/bin/kafka-cluster-start.sh

#!/bin/bash

=============================================

Kafka 3.x KRaft 集群启动脚本

适用场景:启动所有节点或指定节点

=============================================

颜色定义

RED='\033[0;31m'

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

NC='\033[0m' # No Color

Kafka安装目录

CONFIG_FILE="\$KAFKA_HOME/config/kraft/server.properties"

集群节点列表(根据实际情况修改)

NODES=("hadoop001" "hadoop002" "hadoop003")

日志目录

LOG_DIR="\$KAFKA_HOME/logs"

mkdir -p \$LOG_DIR

=============================================

使用说明

=============================================

usage() {

echo "用法: \$0 选项"

echo "选项:"

echo " -a, --all 启动所有节点 (默认)"

echo " -n, --node NODE 启动指定节点,如: \$0 -n hadoop001"

echo " -s, --status 启动后显示集群状态"

echo " -h, --help 显示帮助信息"

echo ""

echo "示例:"

echo " \$0 -a # 启动所有节点"

echo " \$0 -n hadoop001 # 只启动 hadoop001"

echo " \$0 -a -s # 启动所有节点并显示状态"

exit 0

}

=============================================

检查单节点进程状态

=============================================

check_node_status() {

local node=\$1

local result=\(ssh -o ConnectTimeout=5 \\node "jps | grep -q Kafka && echo 'running' || echo 'stopped'" 2>/dev/null)

echo "\$result"

}

=============================================

检查单节点端口状态

=============================================

check_node_port() {

local node=\$1

local port=\$2

local result=\(ssh -o ConnectTimeout=5 \\node "ss -lntp | grep -q ':\$port ' && echo 'listening' || echo 'closed'" 2>/dev/null)

echo "\$result"

}

=============================================

显示集群状态

=============================================

show_cluster_status() {

echo ""

echo -e "\{GREEN}========================================\\{NC}"

echo -e "\{GREEN} Kafka 集群状态报告\\{NC}"

echo -e "\{GREEN}========================================\\{NC}"

echo ""

echo -e "\{YELLOW}【节点状态】\\{NC}"

echo "----------------------------------------"

local running_count=0

for node in "\${NODES@}"; do

process=\(check_node_status \\node)

broker_port=\(check_node_port \\node 9092)

controller_port=\(check_node_port \\node 9093)

if "\\$process" == "running" ; then

process_status="\{GREEN}✅ 运行中\\{NC}"

((running_count++))

else

process_status="\{RED}❌ 已停止\\{NC}"

fi

broker_status="\{GREEN}✅\\{NC}"

controller_status="\{GREEN}✅\\{NC}"

"\\$broker_port" == "closed" && broker_status="\{RED}❌\\{NC}"

"\\$controller_port" == "closed" && controller_status="\{RED}❌\\{NC}"

echo -e " \$node:"

echo -e " 进程: \$process_status"

echo -e " 9092(Broker): \$broker_status"

echo -e " 9093(Controller): \$controller_status"

done

echo ""

echo -e "\{YELLOW}【运行统计】\\{NC}"

echo "----------------------------------------"

echo -e " 运行节点数: \{GREEN}\\running_count\{NC} / \\{#NODES@}"

if \\$running_count -gt 0 ; then

echo ""

echo -e "\{YELLOW}【集群元数据】\\{NC}"

echo "----------------------------------------"

BOOTSTRAP_SERVER="hadoop001:9092,hadoop002:9092,hadoop003:9092"

echo -e "\{GREEN}Controller 信息:\\{NC}"

if -f "\\$KAFKA_HOME/bin/kafka-metadata-quorum.sh" ; then

\KAFKA_HOME/bin/kafka-metadata-quorum.sh --bootstrap-server \\BOOTSTRAP_SERVER describe 2>/dev/null | head -10

else

echo -e "\{YELLOW}⚠️ kafka-metadata-quorum.sh 不存在\\{NC}"

fi

echo ""

echo -e "\{GREEN}Broker 列表:\\{NC}"

if -f "\\$KAFKA_HOME/bin/kafka-broker-api-versions.sh" ; then

\KAFKA_HOME/bin/kafka-broker-api-versions.sh --bootstrap-server \\BOOTSTRAP_SERVER 2>/dev/null | head -5

else

echo -e "\{YELLOW}⚠️ kafka-broker-api-versions.sh 不存在\\{NC}"

fi

echo ""

echo -e "\{GREEN}主题列表:\\{NC}"

if -f "\\$KAFKA_HOME/bin/kafka-topics.sh" ; then

\KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server \\BOOTSTRAP_SERVER --list 2>/dev/null | head -10

else

echo -e "\{YELLOW}⚠️ kafka-topics.sh 不存在\\{NC}"

fi

else

echo ""

echo -e "\{YELLOW}⚠️ 没有节点运行\\{NC}"

fi

echo ""

echo -e "\{GREEN}========================================\\{NC}"

}

=============================================

启动单个节点

=============================================

start_node() {

local node=\$1

echo -e "\{YELLOW}\>\>\> 正在启动节点: \\node \${NC}"

检查进程是否已运行

ssh -o ConnectTimeout=5 \$node "jps | grep -q Kafka" 2>/dev/null

if \\$? -eq 0 ; then

echo -e "\{YELLOW}⚠️ 节点 \\node 的Kafka进程已在运行\${NC}"

return 1

fi

远程启动Kafka

ssh \node "cd \\KAFKA_HOME && nohup bin/kafka-server-start.sh \CONFIG_FILE \> \\LOG_DIR/kafka-\$node.out 2>&1 &"

等待5秒检查启动状态

sleep 5

ssh -o ConnectTimeout=5 \$node "jps | grep -q Kafka" 2>/dev/null

if \\$? -eq 0 ; then

echo -e "\{GREEN}✅ 节点 \\node 启动成功\${NC}"

return 0

else

echo -e "\{RED}❌ 节点 \\node 启动失败,请查看日志: \LOG_DIR/kafka-\\node.out\${NC}"

return 1

fi

}

=============================================

启动所有节点

=============================================

start_all() {

echo -e "\{GREEN}========================================\\{NC}"

echo -e "\{GREEN} 开始启动 Kafka 集群 (共 \\{#NODES@} 个节点)\${NC}"

echo -e "\{GREEN}========================================\\{NC}"

local failed=0

for node in "\${NODES@}"; do

start_node \$node

if \\$? -ne 0 ; then

((failed++))

fi

echo ""

done

echo -e "\{GREEN}========================================\\{NC}"

if \\$failed -eq 0 ; then

echo -e "\{GREEN}✅ 所有节点启动成功!\\{NC}"

else

echo -e "\{RED}❌ 有 \\failed 个节点启动失败\${NC}"

fi

echo -e "\{GREEN}========================================\\{NC}"

}

=============================================

主逻辑

=============================================

SHOW_STATUS="false"

参数总数为0 或 -a 或 --all 开始启动

if \\$# -eq 0 || "\\$1" == "-a" || "\\$1" == "--all" ; then

start_all

SHOW_STATUS="true"

参数为 -n 或 --node 启动单节点,同时要执行节点\$2

elif "\\$1" == "-n" || "\\$1" == "--node" ; then

if -z "\\$2" ; then

echo -e "\{RED}错误: 请指定节点名称\\{NC}"

usage

exit 1

fi

start_node \$2

SHOW_STATUS="true"

elif "\\$1" == "-s" || "\\$1" == "--status" ; then

show_cluster_status

exit 0

elif "\\$1" == "-h" || "\\$1" == "--help" ; then

usage

exit 0 # ← 建议添加 exit

else

echo -e "\{RED}错误: 未知参数 \\1\${NC}"

usage

exit 1 # ← 建议添加 exit

fi

如果启动操作执行了,显示集群状态

if "\\$SHOW_STATUS" == "true" ; then

show_cluster_status

fi

6.3 集群停止脚本

vi $KAFKA_HOME/bin/kafka-cluster-stop.sh

#!/bin/bash

=============================================

Kafka 3.x KRaft 集群停止脚本

=============================================

RED='\033[0;31m'

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

NC='\033[0m'

KAFKA_HOME=${KAFKA_HOME:-/opt/kafka/current}

NODES=("kafka1" "kafka2" "kafka3")

=============================================

使用说明

=============================================

usage() {

echo "用法: $0 选项"

echo "选项:"

echo " -a, --all 停止所有节点 (默认)"

echo " -n, --node NODE 停止指定节点"

echo " -f, --force 强制杀掉进程 (kill -9)"

echo " -h, --help 显示帮助信息"

exit 0

}

=============================================

停止单个节点

=============================================

stop_node() {

local node=$1

local force=$2

echo -e "{YELLOW}\>\>\> 正在停止节点: node ${NC}"

检查进程是否存在

ssh $node "jps | grep -q Kafka"

if $? -ne 0 ; then

echo -e "{YELLOW}⚠️ 节点 node 的Kafka进程未运行${NC}"

return 0

fi

if "$force" == "true" ; then

强制杀掉进程

ssh $node "pkill -9 -f kafka.Kafka"

echo -e "{GREEN}✅ 节点 node 已强制停止${NC}"

else

优雅停止

ssh node "cd KAFKA_HOME && bin/kafka-server-stop.sh"

等待进程退出

local retry=0

while $retry -lt 30 ; do

ssh $node "jps | grep -q Kafka"

if $? -ne 0 ; then

echo -e "{GREEN}✅ 节点 node 已优雅停止${NC}"

return 0

fi

sleep 1

((retry++))

done

echo -e "{YELLOW}⚠️ 节点 node 未在规定时间内停止,请检查${NC}"

return 1

fi

}

=============================================

停止所有节点

=============================================

stop_all() {

local force=$1

echo -e "{GREEN}========================================{NC}"

echo -e "{GREEN} 开始停止 Kafka 集群{NC}"

echo -e "{GREEN}========================================{NC}"

先停止所有节点(从后往前停,避免Controller选举干扰)

for ((i=${#NODES@}-1; i>=0; i--)); do

stop_node "{NODES\[i\]}" "force"

echo ""

done

echo -e "{GREEN}========================================{NC}"

echo -e "{GREEN}✅ 集群停止操作完成{NC}"

echo -e "{GREEN}========================================{NC}"

}

=============================================

主逻辑

=============================================

FORCE="false"

if $# -eq 0 || "$1" == "-a" || "$1" == "--all" ; then

stop_all "$FORCE"

elif "$1" == "-n" || "$1" == "--node" ; then

if -z "$2" ; then

echo -e "{RED}错误: 请指定节点名称{NC}"

usage

fi

stop_node 2 "FORCE"

elif "$1" == "-f" || "$1" == "--force" ; then

FORCE="true"

stop_all "$FORCE"

elif "$1" == "-h" || "$1" == "--help" ; then

usage

else

echo -e "{RED}错误: 未知参数 1${NC}"

usage

fi

6.4 集群状态查看

vi $KAFKA_HOME/bin/kafka-cluster-status.sh

#!/bin/bash

=============================================

Kafka 3.x KRaft 集群状态检查脚本

=============================================

RED='\033[0;31m'

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

BLUE='\033[0;34m'

NC='\033[0m'

KAFKA_HOME=${KAFKA_HOME:-/opt/kafka/current}

NODES=("kafka1" "kafka2" "kafka3")

BOOTSTRAP_SERVER="kafka1:9092,kafka2:9092,kafka3:9092"

=============================================

检查单节点进程

=============================================

check_node_process() {

local node=$1

local result=(ssh node "jps | grep -q Kafka && echo 'running' || echo 'stopped'")

echo "$result"

}

=============================================

检查单节点端口

=============================================

check_node_port() {

local node=$1

local port=$2

local result=(ssh node "ss -lntp | grep -q ':$port ' && echo 'listening' || echo 'closed'")

echo "$result"

}

=============================================

主逻辑

=============================================

echo -e "{BLUE}========================================{NC}"

echo -e "{BLUE} Kafka 集群状态报告{NC}"

echo -e "{BLUE}========================================{NC}"

echo ""

1. 检查各节点进程和端口

echo -e "{YELLOW}【节点状态】{NC}"

echo "----------------------------------------"

for node in "${NODES@}"; do

process=(check_node_process node)

broker_port=(check_node_port node 9092)

controller_port=(check_node_port node 9093)

if "$process" == "running" ; then

process_status="{GREEN}✅ 运行中{NC}"

else

process_status="{RED}❌ 已停止{NC}"

fi

broker_status="{GREEN}✅{NC}"

controller_status="{GREEN}✅{NC}"

"$broker_port" == "closed" && broker_status="{RED}❌{NC}"

"$controller_port" == "closed" && controller_status="{RED}❌{NC}"

echo -e " $node:"

echo -e " 进程: $process_status"

echo -e " 9092(Broker): $broker_status"

echo -e " 9093(Controller): $controller_status"

done

echo ""

echo -e "{YELLOW}【集群元数据】{NC}"

echo "----------------------------------------"

2. 检查集群元数据(如果集群在运行)

if "$(check_node_process ${NODES\[0})" == "running" ]; then

echo -e "{BLUE}Controller 信息:{NC}"

KAFKA_HOME/bin/kafka-metadata-quorum.sh --bootstrap-server BOOTSTRAP_SERVER describe 2>/dev/null | head -10

echo ""

echo -e "{BLUE}Broker 列表:{NC}"

KAFKA_HOME/bin/kafka-broker-api-versions.sh --bootstrap-server BOOTSTRAP_SERVER 2>/dev/null | head -5

else

echo -e "{YELLOW}⚠️ 集群未运行,无法获取元数据信息{NC}"

fi

echo ""

echo -e "{BLUE}========================================{NC}"

7、集群启动

$KAFKA_HOME/bin/kafka-cluster-start.sh -a

8、Kafka测试

9、配置说明

process.roles=broker,controller

指定 Kafka 进程运行的角色:同时作为Broker和Controller

#Broker 处理生产者/消费者的读写请求,存储数据分区

#Controller 管理集群元数据(主题、分区、副本等),负责选举和协调

在 KRaft 模式下,节点可以只做 Broker、只做 Controller,或两者都是。生产环境建议 3 个以上节点都配置为 broker,controller 以实现高可用

cluster.id=tf90bfjeS6WBY4PRcEY5vg

生成的集群ID 整个 Kafka 集群的唯一标识符

node.id=1

节点唯一ID(每台机器不同:1/2/3)

相当于每个员工的工号,公司内不能有两个人工号相同

controller.quorum.voters=1@hadoop001:9093,2@hadoop002:9093,3@hadoop003:9093

告诉每个节点:Controller 集群由哪些节点组成,以及它们通过哪个端口通信

Controller投票者列表(三台机器必须完全相同

3 个节点组成 Controller 集群,通过 9093 端口通信

listeners=PLAINTEXT://:9092,CONTROLLER://:9093

Kafka 进程实际绑定的网卡和端口,决定在哪里监听请求

#://:9092 表示绑定所有网卡的 9092 端口;://:9093 表示绑定所有网卡的 9093 端口

监听端口【关键】监听器必须为一行,同时包含 CONTROLLER 和 PLAINTEXT

PLAINTEXT:给客户端(生产者/消费者)使用;CONTROLLER:给 Controller 集群内部通信使用

controller.listener.names=CONTROLLER

Controller 监听器名称(对应 listeners 中的 CONTROLLER)

指定用于 Controller 之间通信的监听器名称

必须与 listeners 中定义的名称完全一致

inter.broker.listener.name=PLAINTEXT

指定 Broker 之间内部通信(如副本同步)使用哪个监听器

显式指定使用 PLAINTEXT 监听器 如果不配置,默认使用 listeners 中的第一个监听器

对外公布的地址(每台机器不同)

advertised.listeners=PLAINTEXT://hadoop001:9092,CONTROLLER://hadoop001:9093

告诉客户端和其他节点通过什么地址来访问当前节点

advertised.listeners 是对外公布的地址(客户端用)

告诉外界:通过 hadoop001:9092 访问 Broker 服务,通过 hadoop001:9093 访问 Controller 服务

# ==================== 数据存储路径 ====================

# 可以配置多个路径,用逗号分隔(如 /dir1,/dir2

log.dirs=/opt/module/kafka/data

# ==================== 分区和副本 ====================

自动创建主题时的默认分区数 提高并发存取能力

num.partitions=3

客户的消费记录(看到哪一页了)要复印 3 份,分别存放在 3 个分店里,防止丢失。

不能超过 Broker 数量(3 个节点,因子=3 合理)

位移信息记录了每个消费者组的消费进度,丢失会导致重复消费或数据丢失

offsets.topic.replication.factor=3

事务状态主题(__transaction_state)的副本因子

事务状态记录了正在进行的事务,丢失会导致事务异常

正在进行的交易记录(如转账未完成)要复印 3 份,防止系统宕机导致交易状态丢失

使用 Kafka 事务(如 Exactly Once 语义)时需要

transaction.state.log.replication.factor=3

记录交易状态时,至少要得到 2 个分店的确认才算数,1 个分店确认不算(防止数据丢失)

值越大越安全(数据不易丢),但可用性降低(需要更多副本在线)

必须 ≤ replication.factor(3)

transaction.state.log.min.isr=2

相关推荐
无忧智库2 小时前
别再“裸奔”等护网了!万字拆解常态化攻防运营体系:从“应试教育”到“实战免疫”的进阶实录(PPT)
大数据·架构
用户3610588626122 小时前
Spark 核心之自定义累加器以及版本对比变化深度剖析
大数据
观远数据3 小时前
当ChatBI遇上数据合规:AI+BI规模化落地的安全边界如何划定
大数据·人工智能·安全
具身智能进化论3 小时前
协作机器人产业进入规模化部署期,未来几年的增长从何而来
大数据·运维·人工智能·机器人·自动化·工厂方法模式
hzcj8883 小时前
汇正财经:储能装机回暖,估值有待提升
大数据·人工智能
2601_954971134 小时前
大数据时代职场突围
大数据
我要用代码向我喜欢的女孩表白4 小时前
hdfs获取所有路径大小的脚本
大数据·hadoop·hdfs
品牌测评4 小时前
Token Plan平台分享|七条算力订阅路径拆解
大数据·人工智能·架构
渣渣盟5 小时前
当反压问题解决后,如何进一步优化 Flink 作业的 Checkpoint 性能,让大状态作业也能稳定运行?
大数据·flink