一、 前期环境及初始化准备
1、下载安装包及检查java环境
相关安装包可以在相关YUM源站下载下截至相关目录:如cd /opt/soft目录。
wget https://mirrors.cloud.tencent.com/apache/kafka/3.1.0/kafka_2.13-3.1.0.tgz
wget https://mirrors.cloud.tencent.com/apache/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
部署jdk8环境(这种是原包,如果是用YUm安装,可以不用配置环境,使用默认环境)
mkdir /opt/soft
tar -xf jdk-8u301-linux-x64.tar.gz -C /opt/app
chown -R rcs.rcs /opt/app/jdk1.8.0_301
配置java环境变量
#JAVA ENV
export JAVA_HOME=/opt/app/jdk1.8.0_301
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
生效环境变量
source /etc/profile
检查环境
[root@kafka-01 jdk1.8.0_301]# java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
2、服务器基本情况
| 服务主机名 | IP | 用途 |
|---|---|---|
| kafka01 | 192.168.42.189 | zookeeper,kafka |
| kafka02 | 192.168.42.190 | zookeeper,kafka |
| kafka03 | 192.168.42.191 | zookeeper,kafka |
2、基础环境优化
1) 修改内核参数:sysctl.conf
修改并发连接数及端口数。
MonogDB本身也是一个内存使用量较大的数据库,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被linux错误的交换出去了,将浪费很多CPU和IO资源,极大地降低数据库的性能。如果vm.swappiness设置为0,会带来内存溢出的问题,当内存不足时,会强制把某些程序kill掉。所以最好在MongoDB的服务器上设置vm.swappiness的值在1~10之间,尽可能少地使用swap。如果服务器内存比较大时,可以考虑设置vm.swappiness=0。
/etc/sysctl.conf
cat >> /etc/sysctl.conf << EOF
#并发连接backlog设置##
net.core.somaxconn=32768
net.core.netdev_max_backlog=16384
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=16777216
#可用知名端口范围:####
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_syn_backlog=16384
#TCP Socket 读写 Buffer 设置:###
net.ipv4.tcp_rmem = 1024 4096 16777216
net.ipv4.tcp_wmem = 1024 4096 16777216
vm.swappiness = 0
EOF
2)修改文件句柄数等
/etc/security/limits.conf
-
cat >> /etc/security/limits.conf << EOF * hard core 0 * soft core 0 * soft nofile 1048576 * hard nofile 1048576 * soft nproc 524288 * hard nproc 524288 EOF sed -i 's/4096/1048576/g' /etc/security/limits.d/20-nproc.conf egrep -v "^$|^#" /etc/security/limits.d/20-nproc.conf
3)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F
iptables -X
4)添加hosts配置
echo "192.168.42.189 kafka01
192.168.42.190 kafka02
192.168.42.191 kafka03" >>/etc/hosts
5)创建用户及程序目录(三台机器上运行)
#创建用户
useradd rcs
#程序目录
mkdir -p /opt/app
ln -s /opt/app/apache-zookeeper-3.8.0-bin /opt/app/apache-zookeeper
tar -xf kafka_2.13-3.1.0.tgz -C /opt/app/
ln -s /opt/app/kafka_2.13-3.1.0 /opt/app/kafka
数据目录
mkdir -p /data/{zookeeper,kafka}
#日志目录
mkdir -p /data/logs/{zookeeper,kafka}
chown -R rcs.rcs /data
6) 添加PATH 环境
echo “PATH= P A T H : PATH: PATH:HOME/bin:/opt/app/apache-zookeeper/bin:/opt/app/kafka/bin” >>/root/.bash_profile
[root@kafka03 bin]# grep app /root/.bash_profile
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/opt/app/apache-zookeeper/bin:/opt/app/kafka/bin
[root@kafka03 bin]#
二、安装zookeeper
1)查看解压目录并生成配置文件
[root@kafka01 apache-zookeeper-3.8.0]# ll /opt/app
total 4
drwxr-xr-x 17 test ftp 4096 Feb 25 00:47 apache-zookeeper-3.8.0
drwxr-xr-x 7 root root 105 Jan 12 01:07 kafka_2.13-3.1.0
[root@kafka01 apache-zookeeper-3.8.0]#
cat > /opt/app/apache-zookeeper-3.8.0/conf/zoo.cfg << EOF
tickTime=2000
initLimit=10
syncLimit=5
#数据目录
dataDir=/data/zookeeper
#日志目录
dataLogDir=/data/logs/zookeeper
#服务端口
clientPort=2181
server.1=192.168.42.189:2888:3888
server.2=192.168.42.190:2888:3888
server.3=192.168.42.191:2888:3888
EOF
1.tickTime =2000:Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。
2.initLimit =10:LF初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍 的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
3.syncLimit =5:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
4.dataDir:数据文件目录+数据持久化路径,主要用于保存Zookeeper中的数据。
5.clientPort =2181:客户端连接端口,监听客户端连接的端口。
6.server.A=B:C:D。
A是一个数字,表示这个是第几号服务器;集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
B是这个服务器的地址;
C是这个服务器Follower与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
7.admin.serverPort=8088,zookeeper最近版本中有个内嵌的管理控制台是通过jetty启动,默认会占用8080 端口,可通过admin.serverPort=自定义端口号修改。
2)设置相关节点ID(分别在三台机器上创建)
#分别为 3 台 Zookeeper 节点设置不同的节点 id。相关数据参考zoo.cfg 里的server.X 配置
#节点1
echo ‘1’ > /data/zookeeper/myid
#节点2
echo ‘2’ > /data/zookeeper/myid
#节点3
echo ‘3’ > /data/zookeeper/myid
3)通过systemd启动zookeeper服务(在三台机器上创建)
cat >> /etc/systemd/system/zookeeper.service << EOF
[Unit]
Description=Zookeeper Service
After=network.target
After=syslog.target
[Service]
Environment=ZOO_LOG_DIR=/data/logs/zookeeper
SyslogIdentifier=zookeeper
Type=forking
User=rcs
Group=rcs
#如果源包安装java需指定目录:
#Environment=JAVA_HOME=/opt/app/jdk1.8.0_301
ExecStart=/opt/app/apache-zookeeper/bin/zkServer.sh start /opt/app/apache-zookeeper/conf/zoo.cfg
ExecStop=/opt/app/apache-zookeeper/bin/zkServer.sh stop /opt/app/apache-zookeeper/conf/zoo.cfg
ExecReload=/opt/app/apache-zookeeper/bin/zkServer.sh restart /opt/app/apache-zookeeper/conf/zoo.cfg
[Install]
WantedBy=default.target
EOF
4)同步zookeeper至其它节点
使用scp同步发送到另外2台服务器
scp -r /opt/app/apache-zookeeper* root@192.168.42.190:/opt/app/
scp -r /opt/app/apache-zookeeper* root@192.168.42.191:/opt/app/
chown -R rcs.rcs /data
chown -R rcs.rcs /opt/app/
5)分别启动三台机器上的zookeeper
systemctl enable zookeeper
systemctl start zookeeper
三、安装kafka (使用zookeeper方式)
1) 生成配置文件:
cat >> /opt/app/kafka/config/server.properties << EOF
#kafka配置server.properties,每个节点配置的ID不能一样。
broker.id=0
#Kafka Broker 监听地址和端口
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.42.189:9092
#Broker 用于处理网络请求的线程数,默认值 3。
num.network.threads=16
#Broker 用于处理 I/O 的线程数,推荐值 8 * 磁盘数,默认值 8.
num.io.threads=32
#在网络线程停止读取新请求之前,可以排队等待 I/O 线程处理的最大请求个数,
queued.max.requests=50000
#socket 发送缓冲区大小
socket.send.buffer.bytes=1024000
#socket 接收缓冲区大小
socket.receive.buffer.bytes=1024000
#socket 接收请求的最大值(防止 OOM)
socket.request.max.bytes=104857600
#数据目录
log.dirs=/data/logs/kafka
#默认分区数
num.partitions=50
#每个数据目录中的线程数,用于在启动时日志恢复,并在关闭时刷新
num.recovery.threads.per.data.dir=1
#副本数视情况而定,group元数据内部主题的复制因子。磁盘空间大可以设置为3,最少设置为2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=2
#清理过期数据线程数
num.recovery.threads.per.data.dir=3
#单条消息最大 100M
message.max.bytes=104857600
#日志保留时间
log.retention.hours=72
#日志文件中每个 segment 的大小为 1G
log.segment.bytes=1073741824
#检查 segment 文件大小的周期 5 分钟
log.retention.check.interval.ms=300000
#Zookeeper 连接参数
zookeeper.connect=192.168.42.189:2181,192.168.42.190:2181,192.168.42.191:2181
#连接 Zookeeper 的超时时间18秒
zookeeper.connection.timeout.ms=18000
#允许删除主题
delete.topic.enable=true
#用于设置group开启rebalance的延时时间
group.initial.rebalance.delay.ms=0
#副本数视情况而定,磁盘空间大可以设置为3,最少设置为2
default.replication.factor=3
EOF
2)通过systemd启动kafka服务(在三台机器上创建)
cat > /etc/systemd/system/kafka.service << EOF
[Unit]
Description=Apache Kafka server (broker)
After=network.target
[Service]
Type=simple
User=rcs
Group=rcs
#如果源包安装java需指定目录:
#Environment=JAVA_HOME=/opt/app/jdk1.8.0_301
ExecStart=/opt/app/kafka/bin/kafka-server-start.sh /opt/app/kafka/config/server.properties
ExecStop=/opt/app/kafka/bin/kafka-server-stop.sh
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
3)同步相关配置
使用scp同步发送到另外2台服务器
scp -r /opt/app/kafka* root@192.168.42.190:/opt/app/
scp -r /opt/app/kafka* root@192.168.42.191:/opt/app/
chown -R rcs.rcs /data
chown -R rcs.rcs /opt/app/
分别修改kafka02、kafka03的配置,如下
kafka02服务器
broker.id1
listeners=PLAINTEXT://192.168.42.190:9092
kafka03服务器
broker.id=2
listeners=PLAINTEXT://192.168.42.191:9092
4)分别启动三台机器上的kafka
systemctl enable kafka
systemctl start kafka
5)检查服务是否正常
[root@kafka02 bin]# systemctl status kafka
● kafka.service - Apache Kafka server (broker)
Loaded: loaded (/etc/systemd/system/kafka.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-05-10 09:37:19 PDT; 48s ago
Process: 46412 ExecStop=/opt/app/kafka/bin/kafka-server-stop.sh (code=exited, status=0/SUCCESS)
Main PID: 46444 (java)
Tasks: 86
Memory: 329.0M
CGroup: /system.slice/kafka.service
└─46444 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:-AssumeMP -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLe...
May 10 09:37:23 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:22,975] INFO Kafka Server started (kafka.server.KafkaRaftServer)
May 10 09:37:23 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:23,019] INFO [BrokerLifecycleManager id=2] The broker has been unfenced. Transitioning from RECOVERY...cleManager)
May 10 09:37:23 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:23,532] INFO [Controller 2] Unfenced broker: UnfenceBrokerRecord(id=2, epoch=12) (org.apache.kafka.c...rolManager)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,184] INFO [ReplicaFetcherManager on broker 2] Removed fetcher for partitions Set(test-0) (kafka.s...herManager)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,187] INFO [Controller 2] Created topic test with topic ID KWAnN3a5SRur1abBaFwmKA. (org.apache.kaf...rolManager)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,187] INFO [Controller 2] Created partition test-0 with topic ID KWAnN3a5SRur1abBaFwmKA and PartitionRegistra...
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,209] INFO [LogLoader partition=test-0, dir=/data/logs/kafka] Loading producer state till offset 0...nifiedLog$)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,228] INFO Created log for partition test-0 in /data/logs/kafka/test-0 with properties {} (kafka.log.LogManager)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,229] INFO [Partition test-0 broker=2] No checkpointed highwatermark is found for partition test-0....Partition)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,229] INFO [Partition test-0 broker=2] Log loaded for partition test-0 with initial high watermark....Partition)
Hint: Some lines were ellipsized, use -l to show in full.
[root@kafka02 bin]# netstat -lanp |grep 90
tcp 0 96 192.168.42.190:22 192.168.42.1:64745 ESTABLISHED 11187/sshd: root@pt
tcp6 0 0 :::9092 :::* LISTEN 46444/java
tcp6 0 0 :::9093 :::* LISTEN 46444/java
tcp6 0 0 192.168.42.190:46060 192.168.42.189:9093 ESTABLISHED 46444/java
tcp6 0 0 192.168.42.190:46058 192.168.42.189:9093 ESTABLISHED 46444/java
tcp6 0 0 192.168.42.190:9092 192.168.42.191:63200 ESTABLISHED 46444/java
tcp6 0 0 192.168.42.190:9093 192.168.42.189:62496 ESTABLISHED 46444/java
tcp6 0 0 192.168.42.190:9092 192.168.42.189:58598 ESTABLISHED 46444/java
unix 2 [ ACC ] STREAM LISTENING 29290 605/abrtd /var/run/abrt/abrt.socket
unix 3 [ ] STREAM CONNECTED 24990 584/dbus-daemon /run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 64909 4197/packagekitd
unix 3 [ ] STREAM CONNECTED 36790 956/containerd /run/containerd/containerd.sock
unix 3 [ ] STREAM CONNECTED 36490 1180/master
[root@kafka02 bin]#
四、安装kafka使用 KRaft 方法
KRaft 在系统架构层面和之前的版本有什么区别。KRaft 模式提出了去 Zookeeper后的 Kafka 整体架构如下,下图是前后的架构图对比:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZVyH9se3-1652201225553)(C:\Users\column_chen\AppData\Roaming\Typora\typora-user-images\image-20220510235451903.png)]
在当前架构中,Kafka集群包含多个broker节点和一个ZooKeeper 集群。我们在这张图中描绘了一个典型的集群结构:4个broker节点和3个ZooKeeper节点。Kafka 集群的controller (橙色)在被选中后,会从 ZooKeeper 中加载它的状态。controller 指向其他 broker节点的箭头表示 controller 在通知其他 broker 发生了变更。
在新的架构中,三个 controller 节点替代三个ZooKeeper节点。控制器节点和 broker 节点运行在不同的进程中。controller 节点中会选择一个成为Leader(橙色)。新的架构中,控制器不会向 broker 推送更新,而是 broker 从这个 controller Leader 拉取元数据的更新信息。
需要特别注意的是,尽管 controller 进程在逻辑上与 broker 进程是分离的,但它们不需要在物理上分离。即在某些情况下,部分或所有 controller 进程和 broker 进程是可以是同一个进程,即一个broker节点即是broker也是controller。另外在同一个节点上可以运行两个进程,一个是controller进程,一个是broker进程,这相当于在较小的集群中,ZooKeeper进程可以像Kafka broker一样部署在相同的节点上。
1)使得zookeeper方式可以先停了zookeeper服务
systemctl stop zookeeper
systemctl disable zookeeper
2)生成基于kraft配置文件
cat > /opt/app/kafka/config/kraft/server.properties << EOF
#如果process.roles = broker, 服务器在KRaft模式中充当 broker。
#如果process.roles = controller, 服务器在KRaft模式下充当 controller。
#如果process.roles = broker,controller,服务器在KRaft模式中同时充当 broker 和controller。
#如果process.roles 没有设置。那么集群就假定是运行在ZooKeeper模式下。
process.roles=broker,controller
#kafka配置server.properties,每个节点配置的ID不能一样。
node.id=3
#Kafka Broker 监听地址和端口,前端数据要跟nodeid一致
controller.quorum.voters=1@192.168.42.189:9093,2@192.168.42.190:9093,3@192.168.42.191:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://192.168.42.191:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
#Broker 用于处理网络请求的线程数,默认值 3。
num.network.threads=3
#Broker 用于处理 I/O 的线程数,推荐值 8 * 磁盘数,默认值 8.
num.io.threads=8
#socket 发送缓冲区大小
socket.send.buffer.bytes=102400
#socket 接收缓冲区大小
socket.receive.buffer.bytes=102400
#socket 接收请求的最大值(防止 OOM)
socket.request.max.bytes=104857600
#数据目录
log.dirs=/data/logs/kafka
#默认分区数
num.partitions=50
#每个数据目录中的线程数,用于在启动时日志恢复,并在关闭时刷新
num.recovery.threads.per.data.dir=1
#副本数视情况而定,group元数据内部主题的复制因子。磁盘空间大可以设置为3,最少设置为2
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=2
#清理过期数据线程数
num.recovery.threads.per.data.dir=3
#日志保留时间
log.retention.hours=168
#日志文件中每个 segment 的大小为 1G
log.segment.bytes=1073741824
#检查 segment 文件大小的周期 5 分钟
log.retention.check.interval.ms=300000
#允许删除主题
delete.topic.enable=true
#用于设置group开启rebalance的延时时间
group.initial.rebalance.delay.ms=10000
#副本数视情况而定,磁盘空间大可以设置为3,最少设置为2
default.replication.factor=3
EOF
3)同步配置文件
kafka02,kafka03 节点的/config/kraft/server.properties配置与master1的仅有node.id、advertised.listeners不同,其他都一致。
分别修改kafka02、kafka03的配置,如下
kafka02服务器
node.id=2
advertised.listeners=PLAINTEXT://192.168.42.190:9092
kafka03服务器
node.id=3
advertised.listeners=PLAINTEXT://192.168.42.191:9092
4)生成集群 ID
整个集群有一个唯一的ID标志,使用uuid。可使用官方提供的 kafka-storage 工具生成,亦可以自己去用其他生成uuid。
[root@kafka01 bin]# pwd
/opt/app/kafka/bin
[root@kafka01 bin]# kafka-storage.sh random-uuid
AMyQiY2lSxuIs2vPqNPfGA
[root@kafka01 bin]#
5)格式化存储目录并给权限
使用上面生成集群 uuid, 在三个节点上都执行格式化存储目录命令:
[root@kafka01 bin]# kafka-storage.sh format -t AMyQiY2lSxuIs2vPqNPfGA -c …/config/kraft/server.properties
Formatting /data/logs/kafka
[root@kafka01 bin]#chown rcs:rcs /data/kafka /data/logs -R
6)通过systemd启动kafka服务(在三台机器上创建)
cat > /etc/systemd/system/kafka.service << EOF
[Unit]
Description=Apache Kafka server (broker)
After=network.target
[Service]
Type=simple
User=rcs
Group=rcs
#如果源包安装java需指定目录:
#Environment=JAVA_HOME=/opt/app/jdk1.8.0_301
ExecStart=/opt/app/kafka/bin/kafka-server-start.sh /opt/app/kafka/config/kraft/server.properties
ExecStop=/opt/app/kafka/bin/kafka-server-stop.sh
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
7)分别启动三台机器上的kafka
systemctl enable kafka
systemctl start kafka
8)检查服务是否正常
[root@kafka02 bin]# systemctl status kafka
● kafka.service - Apache Kafka server (broker)
Loaded: loaded (/etc/systemd/system/kafka.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-05-10 09:37:19 PDT; 48s ago
Process: 46412 ExecStop=/opt/app/kafka/bin/kafka-server-stop.sh (code=exited, status=0/SUCCESS)
Main PID: 46444 (java)
Tasks: 86
Memory: 329.0M
CGroup: /system.slice/kafka.service
└─46444 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:-AssumeMP -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLe...
May 10 09:37:23 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:22,975] INFO Kafka Server started (kafka.server.KafkaRaftServer)
May 10 09:37:23 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:23,019] INFO [BrokerLifecycleManager id=2] The broker has been unfenced. Transitioning from RECOVERY...cleManager)
May 10 09:37:23 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:23,532] INFO [Controller 2] Unfenced broker: UnfenceBrokerRecord(id=2, epoch=12) (org.apache.kafka.c...rolManager)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,184] INFO [ReplicaFetcherManager on broker 2] Removed fetcher for partitions Set(test-0) (kafka.s...herManager)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,187] INFO [Controller 2] Created topic test with topic ID KWAnN3a5SRur1abBaFwmKA. (org.apache.kaf...rolManager)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,187] INFO [Controller 2] Created partition test-0 with topic ID KWAnN3a5SRur1abBaFwmKA and PartitionRegistra...
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,209] INFO [LogLoader partition=test-0, dir=/data/logs/kafka] Loading producer state till offset 0...nifiedLog$)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,228] INFO Created log for partition test-0 in /data/logs/kafka/test-0 with properties {} (kafka.log.LogManager)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,229] INFO [Partition test-0 broker=2] No checkpointed highwatermark is found for partition test-0....Partition)
May 10 09:37:40 kafka02 kafka-server-start.sh[46444]: [2022-05-10 09:37:40,229] INFO [Partition test-0 broker=2] Log loaded for partition test-0 with initial high watermark....Partition)
Hint: Some lines were ellipsized, use -l to show in full.
[root@kafka02 bin]# netstat -lanp |grep 90
tcp 0 96 192.168.42.190:22 192.168.42.1:64745 ESTABLISHED 11187/sshd: root@pt
tcp6 0 0 :::9092 :::* LISTEN 46444/java
tcp6 0 0 :::9093 :::* LISTEN 46444/java
tcp6 0 0 192.168.42.190:46060 192.168.42.189:9093 ESTABLISHED 46444/java
tcp6 0 0 192.168.42.190:46058 192.168.42.189:9093 ESTABLISHED 46444/java
tcp6 0 0 192.168.42.190:9092 192.168.42.191:63200 ESTABLISHED 46444/java
tcp6 0 0 192.168.42.190:9093 192.168.42.189:62496 ESTABLISHED 46444/java
tcp6 0 0 192.168.42.190:9092 192.168.42.189:58598 ESTABLISHED 46444/java
unix 2 [ ACC ] STREAM LISTENING 29290 605/abrtd /var/run/abrt/abrt.socket
unix 3 [ ] STREAM CONNECTED 24990 584/dbus-daemon /run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 64909 4197/packagekitd
unix 3 [ ] STREAM CONNECTED 36790 956/containerd /run/containerd/containerd.sock
unix 3 [ ] STREAM CONNECTED 36490 1180/master
[root@kafka02 bin]#
五、Kafka常用命令
进入程序目录执行相关命令
[root@kafka01 /]# cd /opt/app/kafka/bin/
1)创建topic
[root@kafka01 bin]# kafka-topics.sh --bootstrap-server localhost:9092 --create --topic testa --partitions 3 --replication-factor 3
Created topic testa.
sh kafka-topics.sh --zookeeper localhost:2181 --create --replication-factor=3 --partitions=6 --topic myname
Created topic myname.
–zookeeper 指定zk
–create 创建topic
–repication-factor=3 副本数3
–partitions=6 分区数6
–topic myname topic名称myname
2)发送消息(测试,输入测试数据)
[root@kafka01 bin]# kafka-console-producer.sh --topic testa --bootstrap-server localhost:9092
>1
>1
>1
>1
>1
>1
>1
>11
3)消费消息(开新窗口,启动可以看到在发送消息数据传了过来
[root@kafka01 bin]# kafka-console-consumer.sh --topic testa --from-beginning --bootstrap-server localhost:9092
1
1
1
1
1
1
1
11
4)查看topic详细信息
[root@kafka01 /]# kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic testa
Topic: testa TopicId: P9vtXylOS42j6-DfNkXihw PartitionCount: 3 ReplicationFactor: 3 Configs: segment.bytes=1073741824
Topic: testa Partition: 0 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
Topic: testa Partition: 1 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
Topic: testa Partition: 2 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
[root@kafka01 /]#
5)删除topic
[root@kafka01 /]# kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic testa
6) 查看消费组
[root@kafka01 bin]# ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
7)查看队列积压
[root@kafka01 bin]# kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group console-consumer-37105
Error: Consumer group 'console-consumer-37105' does not exist.
六、安装使用常见问题
1)日常维护注意
注意:** 停止 Kafka 集群时,一定要等 Kafka 所有节点进程全部停止后再停止 Zookeeper
集群。因为 Zookeeper 集群当中记录着 Kafka 集群相关信息, Zookeeper 集群一旦先停止,
Kafka 集群就没有办法再获取停止进程的信息,只能手动杀死 Kafka 进程了。
2)问题:OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
修改三台的:/opt/app/kafka/bin/kafka-run-class.sh,添加 **-XX:-AssumeMP** ,然后重启服务
[root@kafka02 ~]# grep "AssumeMP" /opt/app/kafka/bin/kafka-run-class.sh
KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC **-XX:-AssumeMP** -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=15 -Djava.awt.headless=true"
[root@kafka02 ~]#
七、3.0版本以后进行了那些更新
Kafka 3.0.0以上包括许多重要的新功能
1)重要更新功能。
-
废弃 Java 8 和 Scala 2.12 的支持
-
Kafka Raft支持元数据topic的快照以及自我管理控制Quorum和其他改进
(Kafka2.8.0正式发布了KRaft的先行版,并且支持在Kraft模式下的部署和运行。KRaft模式下的Kafka可以完全脱离Zookeeper运行,使用自己的基于Raft算法实现的quorum来保证分布式Metadata的一致)
-
默认启用的Kafka生产者的更强的交付保证
(kafka Controller在3.0完全接管了生成Kafka生产者ID的责任。Controller在ZK和KRaft模式下都这样做。这让我们离开桥接版本更近了,这就允许用户从使用ZK的Kafka部署过渡到使用Kraft的新部署。
PID生成在前序的版本中实现使用的是利用Zookeeper进行持久性和并发控制的块生成方案。每次代理需要分配一个新的PID块时,它将使用Zookeeper的setData API来分配下一个快)
-
废弃了消息格式v0和v1
-
优化了OffsetFetch和FindCoordinator请求
-
更灵活的Mirror Maker 2配置和Mirror Maker 1的弃用
-
能够在Kafka Connect的一次调用中重新启动连接器的任务
-
连接器日志上下文和连接器客户端覆盖现在默认启用
-
增强了Kafka流中时间戳同步的语义
-
修改了流的TaskId的公共API
-
Kafka中默认的serde变为空
2)新功能
[KAFKA-8863] - 增加InsertHeader和DropHeaders连接转换 KIP-145
[KAFKA-12471] - 在KIP-500模式下实现createPartitions。
[KAFKA-13207] - 如果分区从取样器中移除,副本fetcher不应该在分歧时更新分区状态
3)改进
[KAFKA-3745] - 考虑向 ValueJoiner 接口添加连接键
[KAFKA-4793] - Kafka Connect: POST connectors/(string: name)/restart 没有启动失败的任务。
[KAFKA-5235] - GetOffsetShell:支持多个主题和消费者配置重写
[KAFKA-6987] - 用CompletableFuture重新实现KafkaFuture
[KAFKA-7458] - 避免在引导阶段进行强制处理
[KAFKA-8326] - 加入Serde>支持
[KAFKA-8372] - 移除已废弃的 RocksDB#compactRange API
[KAFKA-8478] - 在强行处理之前,poll更多的消息
[KAFKA-8531] - 更改默认副本配置
[KAFKA-8613] - 为stream中的窗口操作设定强制的宽限期
[KAFKA-8897] - 增加RocksDB的版本
[KAFKA-9559] - 将默认的"default serde"从 ByteArraySerde改为null
[KAFKA-9726] - MM2 模仿 MM1 的 IdentityReplicationPolicy
[KAFKA-10062] - 增加一个方法来检索Streams应用程序所知道的当前时间戳。
[KAFKA-10201] - 更新代码库以使用更具包容性的术语
[KAFKA-10449] - Connect-distributed样例配置文件中没有关于listeners的说明
[KAFKA-10585] - Kafka Streams应该从清理状态存储目录中进行清理
[KAFKA-10619] - Producer将默认启用EOS
[KAFKA-10675] - ConnectSchema.validateValue()的错误信息应包括模式的名称。
[KAFKA-10697] - 删除ProduceResponse.response
[KAFKA-10746] - 消费者投票超时过期应记录为WARNING而不是INFO。
[KAFKA-10767] - 为ThreadCacheTest中缺少的方法添加单元测试案例
[KAFKA-10769] - 删除JoinGroupRequest#containsValidPattern,因为它与Topic#containsValidPattern是重复的。
[KAFKA-10885] - 重构MemoryRecordsBuilderTest/MemoryRecordsTest以避免大量(不必要的)被忽略的测试案例
[KAFKA-12177] - Retention不是幂等的
[KAFKA-12234] - 扩展OffsetFetch请求以接受多个组ID。
[KAFKA-12287] - 当通过时间戳或持续时间重置偏移量时,在消费者组上添加WARN日志,并默认为最新。
[KAFKA-12288] - 删除任务级文件系统锁
[KAFKA-12294] - 考虑使用转发机制来创建元数据自动主题
[KAFKA-12313] - 考虑废除default.windowed.serde.inner.class配置。
[KAFKA-12329] - 当一个主题不存在时,kafka-reassign-partitions命令更好给出一个错误提示
[KAFKA-12335] - 将junit从5.7.0升级到5.7.1
[KAFKA-12344] - 在Scala API中支持SlidingWindows。
[KAFKA-12347] - 提高Kafka流跟踪进度的能力
[KAFKA-12349] - 跟进KIP-500中的PartitionEpoch问题
[KAFKA-12362] - 确定一个任务是否处于空闲状态
[KAFKA-12379] - KIP-716:允许用MirrorMaker2配置offsetsync主题的位置
[KAFKA-12396] - 当收到空密钥时,为kstreams提供专门的异常。
[KAFKA-12398] - 修复不稳定的测试`ConsumerBounceTest.testClose`。
[KAFKA-12408] - 文档中省略了ReplicaManager的指标
[KAFKA-12409] - ReplicaManager中泄漏的指标
[KAFKA-12415] - 为Gradle 7.0做准备,限制非api依赖的过渡范围。
[KAFKA-12419] - 移除3.0中Kafka Streams的废弃API
[KAFKA-12436] - 废弃MirrorMaker v1
[KAFKA-12439] - 当处于KIP-500模式时,我们应该能够为被围栏的节点分配新的分区
[KAFKA-12442] - 将ZSTD JNI从1.4.8-4升级到1.4.9-1
[KAFKA-12454] - 当给定的brokerIds在当前kafka集群中不存在时,在kafka-log-dirs上增加ERROR日志记录。
[KAFKA-12464] - 增强约束性粘性分配算法
[KAFKA-12479] - 在ConsumerGroupCommand中把分区偏移请求合并为一个请求
[KAFKA-12483] - 在连接器配置中默认启用客户端重写功能
[KAFKA-12484] - 默认启用Connect的连接器日志上下文
[KAFKA-12499] - 根据Streams EOS的提交间隔调整事务超时。
[KAFKA-12509] - 收紧StateDirectory线程锁定
[KAFKA-12541] - 扩展ListOffset以获取最大时间戳的偏移量(KIP-734)。
[KAFKA-12573] - 移除废弃的`Metric#value`。
[KAFKA-12574] - 弃用eos-alpha
[KAFKA-12577] - 移除废弃的`ConfigEntry`构造函数
[KAFKA-12584] - 移除废弃的`Sum`和`Total`类
[KAFKA-12591] - 移除废弃的`quota.producer.default`和`quota.consumer.default`配置
[KAFKA-12612] - 在3.0中从ConsumerRecord/RecordMetadata中删除校验和。
[KAFKA-12614] - 对主干和发布分支的构建使用Jenkinsfile
[KAFKA-12620] - 由控制器生成的生产者ID
[KAFKA-12637] - 删除废弃的PartitionAssignor接口
[KAFKA-12662] - 为ProducerPerformance添加单元测试
[KAFKA-12663] - 更新FindCoordinator,以便一次解决多个Coordinators。
[KAFKA-12675] - 改进粘性一般分配器的可扩展性和性能
[KAFKA-12779] - TaskMetadata应该返回实际的TaskId而不是普通的字符串
[KAFKA-12788] - 改进KRaft副本的放置。
[KAFKA-12803] - 在KRaft模式下,支持重新分配分区
[KAFKA-12819] - 改进测试的生活质量
[KAFKA-12849] - 考虑将TaskMetadata迁移到与内部实现的接口上
[KAFKA-12874] - 将默认的消费者会话超时增加到45秒(KIP-735)。
[KAFKA-12906] - 消费者应在反序列化异常中包括分区和偏移量编号
[KAFKA-12909] - 允许用户选择加入假的左/外流-流加入的改进。
[KAFKA-12921] - 将ZSTD JNI从1.4.9-1升级到1.5.0-1
[KAFKA-12922] - MirrorCheckpointTask应关闭topic过滤器
[KAFKA-12931] - KIP-746:修改KRaft元数据记录
[KAFKA-12934] - 将一些控制器类移至元数据包中
[KAFKA-12981] - 确保LogSegment.maxTimestampSoFar和LogSegment.offsetOfMaxTimestampSoFar被同步读取/更新
[KAFKA-13000] - 改进MockClient中UnsupportedVersionException的处理。
[KAFKA-13021] - 改进API变更的Javadocs并解决KIP-633的后续问题。
[KAFKA-13026] - Idempotent producer(KAFKA-10619)的后续测试。
[KAFKA-13041] - 支持用ducker-ak对系统测试进行调试
[KAFKA-13209] - 升级jetty-server以修复CVE-2021-34429
[KAFKA-13258] - AlterClientQuotas响应失败时不包含错误。
[KAFKA-13259] - 当DescribeProducers响应失败时不包含错误。
[KAFKA-13260] - 查找协调者错误计数不处理v4的问题
4)漏洞
[KAFKA-3968] - 当新的FileMessageSet被刷新到磁盘时,不会在父目录上调用fsync()。
[KAFKA-5146] - Kafka Streams:删除connect-json的编译依赖性
[KAFKA-6435] - 应用程序重置工具可能会删除不正确的内部主题
[KAFKA-7421] - Kafka Connect在加载类时出现死锁
[KAFKA-8315] - 历史join问题
[KAFKA-8562] - 尽管KAFKA-5051,SASL_SSL仍然执行反向DNS查询
[KAFKA-8784] - 删除RocksDBConfigSetter#close的默认实现
[KAFKA-8940] - 不稳定测试SmokeTestDriverIntegrationTest.shouldWorkWithRebalance
[KAFKA-9186] - Kafka Connect充斥着来自DelegatingClassLoader的可能是虚假的错误信息的日志。
[KAFKA-9189] - 如果与Zookeeper的连接丢失,则关闭被阻止。
[KAFKA-9295] - KTableKTableForeignKeyInnerJoinMultiIntegrationTest#shouldInnerJoinMultiPartitionQueryable
[KAFKA-9527] - 当在具有空分区的--input-topics上运行--to-dateetime或--by-duration时,应用程序重置工具返回NPE。
[KAFKA-9672] - ISR中的死亡broker导致isr-expiration失败并出现异常
[KAFKA-9858] - CVE-2016-3189在bzip2 1.0.6中的bzip2recover中存在的Use-after-free漏洞,允许远程攻击者通过制作的bzip2文件导致拒绝服务(崩溃),这与块结束设置在块的开始之前有关。
[KAFKA-10046] - 忽略废弃的PartitionGrouper配置
[KAFKA-10192] - 混乱的测试BlockingConnectorTest#testBlockInConnectorStop
[KAFKA-10340] - 当试图向不存在的topic发送消息时,源连接器应报告错误,而不是永远挂起。
[KAFKA-10614] - 群组协调器onElection/onResignation应该防止领导时代。
[KAFKA-12170] - Connect Cast不能正确处理 "字节 "类型的字段。
[KAFKA-12252] - 当工作者失去领导权时,分布式herder tick线程快速循环。
[KAFKA-12262] - 当拥有密钥的跟随者成为leader时,新的会话密钥不会被分发。
[KAFKA-12297] - MockProducer的实现与异步发送的Callback文档相矛盾
[KAFKA-12303] - 当出现空值时,Flatten SMT会丢弃一些字段。
[KAFKA-12308] - ConfigDef.parseType死锁
[KAFKA-12330] - 当FetchResponse满时,FetchSessionCache可能导致分区的饥饿。
[KAFKA-12336] - 当调用带有命名的Consumed参数的stream[K, V](topicPattern: Pattern)API时,自定义流命名不起作用。
[KAFKA-12350] - 关于refresh.themes.interval.seconds默认值的文档不正确
[KAFKA-12393] - 文档多租户注意事项
[KAFKA-12426] - 缺少在RaftReplicaManager中创建partition.metadata文件的逻辑
[KAFKA-12427] - Broker不关闭有缓冲数据的静默空闲连接
[KAFKA-12474] - 如果无法写入新的会话密钥,Worker会死亡。
[KAFKA-12492] - RocksDBConfigSetter例子的格式被搞乱了
[KAFKA-12514] - SubscriptionState的NPE
[KAFKA-12520] - 生产者状态在启动时被不必要地重新建立。
[KAFKA-12522] - Cast SMT应该允许空值消息通过。
[KAFKA-12548] - 无效记录的错误信息没有被发送给应用程序
[KAFKA-12557] - org.apache.kafka.client.admin.KafkaAdminClientTest#testClientSideTimeoutAfterFailureToReceiveResponse间歇性地无限期挂起。
[KAFKA-12611] - 修复在ProducerPerformance中不正确地使用随机有效载荷的问题
[KAFKA-12619] - 确保LeaderChange消息在初始化高水位之前被提交。
[KAFKA-12650] - 在InternalTopicManager#cleanUpCreatedTopics中的NPE。
[KAFKA-12655] - CVE-2021-28165 - 升级jetty到9.4.39
[KAFKA-12660] - 追加失败后不更新offset提交传感器
[KAFKA-12661] - 当值为非空时,ConfigEntry#equal不比较其他字段
[KAFKA-12667] - 关闭StateDirectory时错误日志不正确
[KAFKA-12672] - 运行test-kraft-server-start会出错
[KAFKA-12677] - raftCluster总是被发送到错误的活动控制器,并且从不更新。
[KAFKA-12684] - 有效的分区列表被成功选出的分区列表错误地替换。
[KAFKA-12686] - AlterIsr响应处理中的竞赛条件
[KAFKA-12691] - TaskMetadata timeSinceIdlingStarted 未正确报告
[KAFKA-12700] - 在文档中,admin.listeners配置的有效值很古怪。
[KAFKA-12702] - 在InterBrokerSendThread中捕获未处理的异常。
[KAFKA-12718] - 会话窗口被过早关闭
[KAFKA-12730] - 从Java 9开始,一次Kerberos登录失败会导致所有未来连接失败
[KAFKA-12747] - 不稳定的测试RocksDBStoreTest.shouldReturnUUIDsWithStringPrefix
[KAFKA-12749] - 被抑制的KTable上的更新日志主题配置丢失
[KAFKA-12752] - CVE-2021-28168升级jersey到2.34或3.02
[KAFKA-12754] - 当读取偏移量时,TaskMetadata endOffsets不更新。
[KAFKA-12777] - AutoTopicCreationManager不处理响应错误
[KAFKA-12782] - Javadocs搜索发送到一个不存在的URL。
[KAFKA-12792] - 修复指标错误并引入TimelineInteger
[KAFKA-12815] - KTable.transformValue可能有不正确的记录元数据
[KAFKA-12835] - 主题ID在borker上可能不匹配(在borker之间协议版本更新后)。
[KAFKA-12851] - 不稳定的测试RaftEventSimulationTest.canMakeProgressIfMajorityIsReachable
[KAFKA-12856] - 升级Jackson到2.12.3
[KAFKA-12865] - Admin Client API在描述ACL时的文档错误
[KAFKA-12866] - 即使使用chroot,Kafka也需要ZK的root权限。
[KAFKA-12867] - Trogdor ConsumeBenchWorker在配置maxMessages时过早退出。
[KAFKA-12870] - RecordAccumulator卡在刷新状态中
[KAFKA-12880] - 在3.0中删除废弃的Count和SampledTotal
[KAFKA-12889] - 日志清理组考虑空的日志段以避免留下空的日志
[KAFKA-12890] - 消费者组卡在 "CompletingRebalance"中。
[KAFKA-12896] - 由重复的组JoinGroups引起的组再平衡循环
[KAFKA-12897] - KRaft控制器不能在一个broker集群上创建具有多个分区的主题
[KAFKA-12898] - 订阅中拥有的分区必须被排序
[KAFKA-12904] - Connect的验证REST端点使用不正确的超时。
[KAFKA-12914] - StreamSourceNode.toString()与StreamsBuilder.stream(Pattern)ctor一起抛出。
[KAFKA-12925] - 中间接口中缺少prefixScan
[KAFKA-12926] - ConsumerGroupCommand的java.lang.NullPointerException在运行kafka-consumer-groups.sh时出现负数。
[KAFKA-12945] - 在3.0中删除端口、host.name和相关配置
[KAFKA-12948] - NetworkClient.close(node)在节点处于连接状态时使NetworkClient无法使用
[KAFKA-12949] - TestRaftServer的scala.MatchError: null on test-kraft-server-start.sh
[KAFKA-12951] - 恢复GlobalKTable时的无限循环
[KAFKA-12964] - 损坏的分段恢复会删除新的生产者状态快照
[KAFKA-12983] - 在加入组之前,onJoinPrepare不总是被调用。
[KAFKA-12984] - 合作的粘性分配器会被无效的SubscriptionState输入元数据卡住
[KAFKA-12991] - 修复对`AbstractCoordinator.state`的不安全访问。
[KAFKA-12993] - Streams "内存管理 "文档的格式被搞乱了
[KAFKA-12996] - 当获取的偏移量小于领导者的起始偏移量时,不能正确处理分歧纪元的OffsetOutOfRange。
[KAFKA-13002] - 对于非MAX_TIMESTAMP规格,listOffsets必须立即降级。
[KAFKA-13003] - KafkaBroker公布socket端口而不是配置的公开端口
[KAFKA-13007] - KafkaAdminClient getListOffsetsCalls为每个主题分区建立集群快照。
[KAFKA-13008] - 在等待分区滞后时,Stream将停止处理数据很长一段时间。
[KAFKA-13010] - 不稳定测试org.apache.kafka.streams.integration.TaskMetadataIntegrationTest.shouldReportCorrectCommittedOffsetInformation()。
[KAFKA-13029] - FindCoordinators 批处理可能会在滚动升级期间破坏消费者
[KAFKA-13033] - 协调器不可用错误应该导致添加到取消映射列表中进行新的查找
[KAFKA-13037] - “线程状态已经是 PENDING_SHUTDOWN”日志垃圾邮件
[KAFKA-13053] - KRaft 记录的Bump框架版本
[KAFKA-13056] - 当控制器共存时,Broker不应生成快照
[KAFKA-13057] - 许多broker RPC 在 KRaft 模式下未启用
[KAFKA-13058] - `AlterConsumerGroupOffsetsHandler` 不能正确处理分区错误。
[KAFKA-13073] - 由于 MockLog 的实现不一致,模拟测试失败
[KAFKA-13078] - 过早关闭 FileRawSnapshotWriter
[KAFKA-13080] - 获取快照请求未定向到控制器中的 kraft
[KAFKA-13092] - LISR 请求中的性能回归
[KAFKA-13096] - 添加/删除/替换线程时,QueryableStoreProvider 不会更新,呈现 IQ 不可能
[KAFKA-13098] - 在元数据日志目录中恢复快照时没有此类文件异常
[KAFKA-13099] - transactionalIds 过期时消息太大错误
[KAFKA-13100] - 控制器无法恢复到内存快照
[KAFKA-13104] - 控制器在辞职时应通知RaftClient。
[KAFKA-13112] - 控制器的承诺偏移量与raft客户端监听器上下文不同步。
[KAFKA-13119] - 启动时验证KRaft controllerListener的配置。
[KAFKA-13127] - 修复偏离的分区查找逻辑
[KAFKA-13129] - 修复与ConfigCommand变化有关的破碎系统测试
[KAFKA-13132] - 在LISR请求中升级到主题ID,在3.0中引入了缺口
[KAFKA-13137] - KRaft Controller Metric MBean名称的引用不正确
[KAFKA-13139] - 在请求重启没有任务的连接器后出现空响应,导致NPE
[KAFKA-13141] - 如果存在分歧时,Leader不应更新follower的获取偏移量
[KAFKA-13143] - 禁用KRaft控制器的元数据端点
[KAFKA-13160] - 修复在使用KRaft时调用代理的配置处理程序以传递预期的默认资源名称的代码。
[KAFKA-13161] - 在KRaft的分区变化后,Follower leader和ISR状态没有更新
[KAFKA-13167] - 在关机期间,KRaft broker应立即进行心跳。
[KAFKA-13168] - KRaft观察者不应该有一个副本ID
[KAFKA-13173] - KRaft控制器不能正确处理同时过期的broker
[KAFKA-13198] - 处理PartitionChangeRecord时,TopicsDelta不更新已删除的主题
[KAFKA-13214] - 消费者在断开连接后不应该重置组的状态
[KAFKA-13215] - 片面的测试org.apache.kafka.streams.integration.TaskMetadataIntegrationTest.shouldReportCorrectEndOffsetInformation
[KAFKA-13219] - BrokerState指标对KRaft集群不起作用
[KAFKA-13262] - 模拟客户端现在有最终close()方法
[KAFKA-13266] - `InitialFetchState`应该在分区从获取器中移除后创建
[KAFKA-13270] - Kafka可能无法连接到ZooKeeper,永远重试,并且永远不会启动
[KAFKA-13276] - 公共的DescribeConsumerGroupsResult构造函数指向KafkaFutureImpl
[KAFKA-13277] - 请求/响应中长标签字符串的序列化会引发BufferOverflowException
5)任务
[KAFKA-8405] - 删除废弃的 `kafka-preferred-replica-election` 命令[KAFKA-8734] - 删除 PartitionAssignorAdapter 和废弃的 PartitionAssignor 接口
[KAFKA-10070] - 参数化连接单元测试以删除代码重复
[KAFKA-10091] - 改善任务空闲
[KAFKA-12482] - 删除弃用的 rest.host.name 和 rest.port Connect worker 配置
[KAFKA-12519] - 考虑删除流旧的内置指标版本
[KAFKA-12578] - 删除弃用的安全类/方法
[KAFKA-12579] - 从 3.0 的客户端中删除各种弃用的方法
[KAFKA-12581] - 删除弃用的 Admin.electPreferredLeaders
[KAFKA-12588] - 在 shell 命令中删除弃用的 --zookeeper
[KAFKA-12590] - 删除弃用的 SimpleAclAuthorizer
[KAFKA-12592] - 删除弃用的 LogConfig.Compact
[KAFKA-12600] - 删除客户端配置 `client.dns.lookup` 的弃用配置值 `default`
[KAFKA-12625] - 修复通知文件
[KAFKA-12717] - 删除内部转换器配置属性
[KAFKA-12724] - 将 2.8.0 添加到系统测试和流升级测试
[KAFKA-12794] - DescribeProducersRequest.json 中的尾随 JSON 令牌可能会导致某些 JSON 解析器中的解析错误
[KAFKA-12800] - 配置 jackson 以拒绝生成器中的尾随输入
[KAFKA-12820] - 升级 maven-artifact 依赖以解决 CVE-2021-26291
[KAFKA-12976] - 从删除主题调用中删除 UNSUPPORTED_VERSION 错误
[KAFKA-12985] - CVE-2021-28169 - 将jetty升级到 9.4.42
[KAFKA-13035] - Kafka Connect:更新 POST connectors/(string: name)/restart 文档以包含任务重启行为
[KAFKA-13051] - 需要为 3.0 定义 Principal Serde
[KAFKA-13151] - 在 KRaft 中禁止策略配置
6)测试
[KAFKA-9009] - 片状测试 kafka.integration.MetricsDuringTopicCreationDeletionTest.testMetricsDuringTopicCreateDelete
[KAFKA-12273] - InterBrokerSendThread#pollOnce 即使正确关闭也会抛出 FatalExitError
[KAFKA-12284] - 片状测试 MirrorConnectorsIntegrationSSLTest#testOneWayReplicationWithAutoOffsetSync
[KAFKA-12384] - 片状测试 ListOffsetsRequestTest.testResponseIncludesLeaderEpoch
[KAFKA-12561] - 修复片状 kafka.server.RaftClusterTest.testCreateClusterAndCreateListDeleteTopic()
[KAFKA-12629] - 失败测试:RaftClusterTest
[KAFKA-13045] - 为批处理 OffsetFetch 请求添加测试,其中我们在请求中具有相同的组出现不止一次
7)子任务
[KAFKA-7106] - 从Window定义中删除segment/segmentInterval。
[KAFKA-7606] - 从StreamsResetter中删除废弃的选项
[KAFKA-7785] - 移除PartitionGrouper接口和它的配置,并将DefaultPartitionGrouper移至内部包。
[KAFKA-9548] - SPI - RemoteStorageManager和RemoteLogMetadataManager接口及相关类。
[KAFKA-10292] - 修复不稳定的streams/streams_broker_bounce_test.py
[KAFKA-10434] - 删除WindowStore上已废弃的方法
[KAFKA-10537] - 将KStreamImpl过滤器转换成新的PAPI
[KAFKA-10538] - 将KStreamImpl map转换为新的PAPI
[KAFKA-10541] - 将KTable过滤器转换为新的PAPI
[KAFKA-10587] - 为KIP-629重新命名kafka-mirror-maker CLI命令行参数
[KAFKA-10588] - 为KIP-629重新命名kafka-console-consumer CLI命令行参数
[KAFKA-10589] - 重新命名KIP-629的kafka-replica-verification CLI命令行参数
[KAFKA-12158] - 考虑改进RaftClient.scheduleAppend的返回类型。
[KAFKA-12173] - 将streams:streams-scala模块迁移到JUnit 5。
[KAFKA-12267] - 实现DescribeTransactions API
[KAFKA-12368] - RSM和RLMM的非内存实现。
[KAFKA-12369] - 实现ListTransactions API
[KAFKA-12429] - 内部topic中所有消息类型的Serdes,在RLMM的默认实现中使用。
[KAFKA-12434] - DescribeProducers的Admin API
[KAFKA-12441] - 删除已废弃的方法StreamsBuilder#addGlobalStore
[KAFKA-12449] - 移除已废弃的WindowStore#put
[KAFKA-12450] - 移除ReadOnlyWindowStore中被废弃的方法
[KAFKA-12451] - 移除WindowStore中基于长的读操作的废弃注释
[KAFKA-12452] - 移除ProcessorContext#forward的废弃重载
[KAFKA-12467] - 实现QuorumController元数据快照
[KAFKA-12515] - ApiVersionManager应根据请求版本创建响应
[KAFKA-12536] - 为ReadOnlySessionStore添加基于即时的方法
[KAFKA-12552] - 从Log类中提取分段map到单独的类中。
[KAFKA-12553] - 重构日志层恢复逻辑
[KAFKA-12568] - 删除废弃的 "KStream#groupBy/join"、"Join#named "重载。
[KAFKA-12571] - 消除LeaderEpochFileCache构造函数对LogEndOffset的依赖。
[KAFKA-12575] - 消除Log.isLogDirOffline的布尔属性。
[KAFKA-12586] - DescribeTransactions的Admin API
[KAFKA-12596] - 删除topicCommands中废弃的--zookeeper。
[KAFKA-12597] - 移除ReassignPartitionsCommands中已废弃的--zookeeper。
[KAFKA-12598] - 移除ConfigCommand中废弃的--zookeeper。
[KAFKA-12630] - 移除废弃的KafkaClientSupplier#getAdminClient
[KAFKA-12631] - 支持api辞去raft领导
[KAFKA-12633] - 移除废弃的 "TopologyTestDriver#pipeInput readOutput"
[KAFKA-12683] - 移除废弃的 "UsePreviousTimeOnInvalidTimeStamp"。
[KAFKA-12709] - ListTransactions的Admin API
[KAFKA-12716] - 终止transactions的Admin API
[KAFKA-12758] - 创建一个新的 "server-common"模块并将ApiMessageAndVersion、RecordSerde、AbstractApiMessageSerde和BytesApiMessageSerde移至该模块。
[KAFKA-12790] - 删除 SslTransportLayerTest.testUnsupportedTlsVersion
[KAFKA-12796] - 删除 `streams-scala` 下不推荐使用的类
[KAFKA-12808] - 删除 StreamsMetrics 下已弃用的方法
[KAFKA-12809] - 删除 Stores 下已弃用的方法
[KAFKA-12810] - 删除启用的TopologyDescription.Source#topics
[KAFKA-12813] - 删除 ProcessorContext 中已弃用的调度方法
[KAFKA-12814] - 删除不推荐使用的方法 StreamsConfig#getConsumerConfig
[KAFKA-12816] - 添加层存储配置。
[KAFKA-12863] - 配置控制器快照生成
[KAFKA-12884] - 在系统测试中删除“--zookeeper”
[KAFKA-12888] - 添加transaction工具
[KAFKA-12905] - 用 Mockito 替换 EasyMock 和 PowerMock 为 NamedCacheMetricsTest
[KAFKA-12924] - 在流模块(指标)中用 Mockito 替换 EasyMock 和 PowerMock
[KAFKA-12929] - KIP-750:在 Kafka 3.0 中弃用对 Java 8 的支持
[KAFKA-12930] - KIP-751:在 Kafka 3.0 中弃用对 Scala 2.12 的支持
[KAFKA-12940] - 在 Jenkins 中启用 JDK 16 构建
[KAFKA-12944] - KIP-724:当 IBP 为 3.0 或更高时,假设消息格式版本为 3.0
[KAFKA-12952] - 元数据快照文件分隔符
[KAFKA-12955] - 修复 LogLoader 以传递要删除的段的物化视图
[KAFKA-12979] - 在transaction工具中实现 --find-hanging API
[KAFKA-12992] - 公开 kraft 配置属性
[KAFKA-13011] - 更新 deleteTopics Admin API
[KAFKA-13015] - 为元数据快照创建系统测试
[KAFKA-13023] - 在 V3.0 中将“范围,合作粘性”作为默认分配器
[KAFKA-13059] - 更新 DeleteConsumerGroupOffsetsHandler
[KAFKA-13062] - 重构 DeleteConsumerGroupsHandler
[KAFKA-13063] - 重构 DescribeConsumerGroupsHandler
[KAFKA-13064] - 重构 ListConsumerGroupOffsetsHandler
[KAFKA-13072] - 重构 RemoveMembersFromConsumerGroupHandler
[KAFKA-13090] - 改进集群快照集成测试
[KAFKA-13113] - 向 RaftClient 添加取消注册支持。
[KAFKA-13114] - 当内存快照丢失时,在放弃期间取消注册监听器
[KAFKA-13116] - KIP-724:由于 KAFKA-12944 调整系统测试
[KAFKA-13165] - 验证节点 ID、进程角色和法定投票人
本文详细介绍了如何在Linux环境下安装最新版Kafka 3.1.0,包括前期环境配置、Zookeeper安装、Kafka使用Zookeeper与KRaft两种方式的安装步骤,以及日常维护命令。还涵盖了3.0版本以来的重要更新与新特性。
1192





