kafka配置
bash
############################# 服务器基础设置 #############################
# broker的ID。每个broker必须设置为一个唯一的整数。
broker.id=0
############################# 套接字服务器设置 #############################
# 套接字服务器监听的地址。如果未配置,主机名将等于java.net.InetAddress.getCanonicalHostName()的值,监听器名称为PLAINTEXT,端口为9092。
# 格式:
# listeners = listener_name://host_name:port
# 例如:
# listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092
# broker向客户端通告的监听器名称、主机名和端口。
# 如果未设置,则使用"listeners"的值。
#advertised.listeners=PLAINTEXT://your.host.name:9092
# 将监听器名称映射到安全协议,默认情况下它们是相同的。请参阅配置文档以获取更多详细信息。
#listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
# 服务器用于从网络接收请求和向网络发送响应的线程数
num.network.threads=3
# 服务器用于处理请求的线程数,可能包括磁盘I/O
num.io.threads=8
# 套接字服务器使用的发送缓冲区(SO_SNDBUF)
socket.send.buffer.bytes=102400
# 套接字服务器使用的接收缓冲区(SO_RCVBUF)
socket.receive.buffer.bytes=102400
# 套接字服务器将接受的请求的最大大小(防止OOM)
socket.request.max.bytes=104857600
############################# 日志基础设置 #############################
# 用于存储日志文件的目录的逗号分隔列表
log.dirs=/tmp/kafka-logs
# 每个主题的默认日志分区数量。更多的分区允许更大的消费并行性,但也会导致broker上的文件数量增加。
num.partitions=1
# 用于在启动时进行日志恢复和关闭时进行刷新操作的每个数据目录的线程数。
# 对于使用RAID阵列中的数据目录的安装,建议增加此值。
num.recovery.threads.per.data.dir=1
############################# 内部主题设置 #############################
# 用于组元数据内部主题"__consumer_offsets"和"__transaction_state"的复制因子。
# 对于开发测试以外的任何情况,建议使用大于1的值以确保可用性,例如3。
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
############################# 日志刷新策略 #############################
# 消息会立即写入文件系统,但默认情况下,我们只会懒惰地使用fsync()同步操作系统缓存。以下配置控制将数据刷新到磁盘的行为。
# 这里有一些重要的权衡:
# 1. 持久性:未刷新的数据可能会丢失,如果你不使用复制的话。
# 2. 延迟:非常大的刷新间隔可能会导致刷新时出现延迟峰值,因为有大量数据需要刷新。
# 3. 吞吐量:刷新通常是最昂贵的操作,较小的刷新间隔可能导致过多的查找。
# 下面的设置允许一个全局配置或在每个主题的基础上重写,以在一段时间后或每N条消息后刷新数据。
#log.flush.interval.messages=10000
# 消息在日志中最多可以停留的时间,然后我们强制刷新
#log.flush.interval.ms=1000
############################# 日志保留策略 #############################
# 以下配置控制日志段的处置策略。策略可以设置为在一段时间后或积累一定大小后删除段。
# 当任意一个条件满足时,段将被删除。删除始终从日志末尾开始。
# 日志文件由于时间原因可以删除的最小年龄
log.retention.hours=168
# 基于大小的日志保留策略。日志段将被修剪,除非剩余段低于log.retention.bytes。独立于log.retention.hours运行。
#log.retention.bytes=1073741824
# 日志段文件的最大大小。达到此大小时,将创建一个新的日志段。
#log.segment.bytes=1073741824
# 按保留策略检查日志段是否可以删除的时间间隔
log.retention.check.interval.ms=300000
############################# Zookeeper #############################
# Zookeeper连接字符串(请参阅zookeeper文档以获取详细信息)。
# 这是一个逗号分隔的host:port对,每个对应一个zk服务器。例如:"127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002"。
# 你还可以在URL中附加一个可选的chroot字符串,以指定所有kafka znode的根目录。
zookeeper.connect=localhost:2181
# 连接zookeeper的超时时间(毫秒)
zookeeper.connection.timeout.ms=18000
############################# 组协调器设置 #############################
# 以下配置指定组协调器将延迟初始消费者再平衡的时间(毫秒)。
# 新成员加入组时,再平衡将进一步延迟group.initial.rebalance.delay.ms的值,最多为max.poll.interval.ms。
# 默认值为3秒。
# 在此我们将其覆盖为0,因为这为开发和测试提供了更好的开箱即用体验。
# 然而,在生产环境中,默认值3秒更为合适,因为这有助于避免应用启动期间不必要且可能代价高昂的再平衡。
group.initial.rebalance.delay.ms=0
一、单节点启动
bash
nohup ./kafka-server-start.sh ../config/server.properties > kafka.nohup &
kafka配置
bash
broker.id=0
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=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.43.185:2181,192.168.43.50:2181,192.168.43.63:2181
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
# 配置Kafka监听的地址和端口
listeners=PLAINTEXT://192.168.43.185:9092
# 配置广告给客户端的地址和端口
advertised.listeners=PLAINTEXT://192.168.43.185:9092
测试是否启动成功
1、创建主题:使用 bin/kafka-topics.sh 创建一个测试主题。
bash
./kafka-topics.sh --create --topic test --bootstrap-server 192.168.43.185:9092 --partitions 3 --replication-factor 1
这将创建一个名为test的主题,分区数为3,复制因子为2。
2、发送消息:使用 bin/kafka-console-producer.sh 发送一些消息到创建的主题。
bash
./kafka-console-producer.sh --topic test --bootstrap-server 192.168.43.185:9092
在提示符下输入一些消息,然后按Enter键发送。
3、消费消息:使用 bin/kafka-console-consumer.sh 消费发送的消息。
bash
./kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server 192.168.43.185:9092
这将从test主题中消费消息并将其显示在控制台上。
二、集群启动
bash
有三个Kafka Broker,分别运行在以下IP地址:
Broker 1: 192.168.43.185
Broker 2: 192.168.43.50
Broker 3: 192.168.43.63
Broker 1配置(192.168.43.185)
bash
# Broker ID
broker.id=0
# 网络线程和IO线程
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=/tmp/kafka-logs
# 分区数量
num.partitions=1
# 日志恢复线程数
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.retention.hours=168
log.retention.check.interval.ms=300000
# Zookeeper连接设置
zookeeper.connect=192.168.43.185:2181,192.168.43.50:2181,192.168.43.63:2181
zookeeper.connection.timeout.ms=18000
# 消费者组协调器设置
group.initial.rebalance.delay.ms=0
# 监听地址
listeners=PLAINTEXT://192.168.43.185:9092
advertised.listeners=PLAINTEXT://192.168.43.185:9092
Broker 2配置(192.168.43.50)
bash
# Broker ID
broker.id=1
# 网络线程和IO线程
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=/tmp/kafka-logs
# 分区数量
num.partitions=1
# 日志恢复线程数
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.retention.hours=168
log.retention.check.interval.ms=300000
# Zookeeper连接设置
zookeeper.connect=192.168.43.185:2181,192.168.43.50:2181,192.168.43.63:2181
zookeeper.connection.timeout.ms=18000
# 消费者组协调器设置
group.initial.rebalance.delay.ms=0
# 监听地址
listeners=PLAINTEXT://192.168.43.50:9092
advertised.listeners=PLAINTEXT://192.168.43.50:9092
Broker 3配置(192.168.43.63)
bash
# Broker ID
broker.id=2
# 网络线程和IO线程
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=/tmp/kafka-logs
# 分区数量
num.partitions=1
# 日志恢复线程数
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.retention.hours=168
log.retention.check.interval.ms=300000
# Zookeeper连接设置
zookeeper.connect=192.168.43.185:2181,192.168.43.50:2181,192.168.43.63:2181
zookeeper.connection.timeout.ms=18000
# 消费者组协调器设置
group.initial.rebalance.delay.ms=0
# 监听地址
listeners=PLAINTEXT://192.168.43.63:9092
advertised.listeners=PLAINTEXT://192.168.43.63:9092
测试是否启动成功
1、创建主题:使用 bin/kafka-topics.sh 创建一个测试主题(--replication-factor 3 写3个,3个副本就证明集群创建成功)。
bash
./kafka-topics.sh --create --topic test2 --bootstrap-server 192.168.43.185:9092 --partitions 3 --replication-factor 3
在这个命令中:
bash
--topic test 指定了主题的名称。
--partitions 1 指定了主题的分区数量。
--replication-factor 3 指定了每个分区的副本数量。
--bootstrap-server 192.168.43.185:9092 指定了 Kafka 集群的一个 Broker 地址。
为什么使用副本因子 ?
bash
数据冗余和可靠性:当一个 Broker 发生故障时,副本因子确保数据仍然可用,因为其他 Broker 上有数据的副本。
高可用性:在副本因子设置为 3 的情况下,Kafka 可以在一个 Broker 发生故障时继续提供服务。
负载均衡:通过在多个 Broker 之间分布数据副本,可以更好地平衡负载。
副本因子的设置
bash
副本因子的值应小于或等于 Kafka 集群中的 Broker 数量。例如,如果你的集群中有三个 Broker,那么副本因子不能超过 3。超出这个限制会导致创建主题失败。
通过合理设置副本因子,可以在数据可靠性和资源利用之间取得平衡。
每个主题可以有一个或多个分区,每个分区存储一部分主题的数据,并且可以独立于其他分区进行读写操作。
分区的作用
bash
并行处理:
分区使 Kafka 能够并行处理数据。每个消费者可以读取一个或多个分区的数据,这样就可以分散负载,提高处理效率。
扩展性:
分区数量增加可以提高系统的扩展性,因为更多的分区可以分布在更多的 Broker 上,从而分散负载。
数据顺序:
Kafka 保证在同一个分区内数据是有序的,但跨分区数据则没有全局顺序。因此,如果数据顺序很重要,可以通过合适的分区键将相关的数据发送到同一个分区。
总结:
bash
副本能提升高可用,而多分区则可以提高数据并发读写能力,但如果业务有顺序要求,
那么就要考虑使用一个分区或者多分区但消费端做业务顺序消费
2、发送消息:使用 bin/kafka-console-producer.sh 发送一些消息到创建的主题。
bash
./kafka-console-producer.sh --topic test2 --bootstrap-server 192.168.43.185:9092
在提示符下输入一些消息,然后按Enter键发送。
3、消费消息:使用 bin/kafka-console-consumer.sh 消费发送的消息,在3个节点能消费到同样的消息,那么kafka集群创建成功
bash
./kafka-console-consumer.sh --topic test2 --from-beginning --bootstrap-server 192.168.43.185:9092
./kafka-console-consumer.sh --topic test2 --from-beginning --bootstrap-server 192.168.43.150:9092
./kafka-console-consumer.sh --topic test2 --from-beginning --bootstrap-server 192.168.43.163:9092
这将从test2主题中消费消息并将其显示在控制台上。