参考博文:kafka 配置文件参数详解
参考博文:Kafka【第一篇】Kafka集群搭建
参考博文:如何为Kafka集群选择合适的Partitions数量
参考博文:kafka常用配置【重要】
参考博文:kafka常用配置
1. 主机规划
主机名称 |
IP信息 |
内网IP |
操作系统 |
安装软件 |
备注:运行程序 |
mini01 |
10.0.0.11 |
172.16.1.11 |
CentOS 7.4 |
jdk、zookeeper、kafka |
QuorumPeerMain、Kafka |
mini02 |
10.0.0.12 |
172.16.1.12 |
CentOS 7.4 |
jdk、zookeeper、kafka |
QuorumPeerMain、Kafka |
mini03 |
10.0.0.13 |
172.16.1.13 |
CentOS 7.4 |
jdk、zookeeper、kafka |
QuorumPeerMain、Kafka |
mini04 |
10.0.0.14 |
172.16.1.14 |
CentOS 7.4 |
jdk、zookeeper |
QuorumPeerMain |
mini05 |
10.0.0.15 |
172.16.1.15 |
CentOS 7.4 |
jdk、zookeeper |
QuorumPeerMain |
其中zookeeper的安装可参见:Hbase-2.0.0_01_安装部署
添加hosts信息,保证每台Linux都可以相互ping通
[root@mini01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.11 mini01
172.16.1.12 mini02
172.16.1.13 mini03
172.16.1.14 mini04
172.16.1.15 mini05
windows的hosts文件也追加如下信息
c:\windows\system32\drivers\etc
########################################## 追加信息如下:
10.0.0.11 mini01
10.0.0.12 mini02
10.0.0.13 mini03
10.0.0.14 mini04
10.0.0.15 mini05
2. Kafka的部署与配置修改
2.1. 软件部署
[yun@mini01 software]$ pwd
/app/software
[yun@mini01 software]$ tar xf kafka_2.-2.0..tgz
[yun@mini01 software]$ mv kafka_2.-2.0. /app/
[yun@mini01 software]$ cd /app/
[yun@mini01 ~]$ ln -s kafka_2.-2.0./ kafka
[yun@mini01 ~]$ ll -d kafka*
lrwxrwxrwx yun yun Sep : kafka -> kafka_2.-2.0./
drwxr-xr-x yun yun Jul : kafka_2.-2.0.
2.2. 环境变量
需要使用root权限
[root@mini01 ~]# tail /etc/profile
done unset i
unset -f pathmunge # kafka
export KAFKA_HOME=/app/kafka
export PATH=$KAFKA_HOME/bin:$PATH [root@mini01 profile.d]# logout
[yun@mini01 hbase]$ source /etc/profile # 使用yun用户,并重新加载环境变量
2.3. 配置修改
[yun@mini01 config]$ pwd
/app/kafka/config
[yun@mini01 config]$ vim server.properties
############################# Server Basics #############################
# 每一个broker在集群中的唯一标示★★★
# 比如mini01 为0 mini02 为1 mini03 为2
broker.id= ############################# Socket Server Settings #############################
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
# 启动kafka服务监听的ip和端口,默认为java.net.InetAddress.getCanonicalHostName()获取的ip
#listeners=PLAINTEXT://:9092 # broker通知到producers和consumers的主机地址和端口号
# 如果未设置,使用listeners的配置。否则,使用java.net.InetAddress.getCanonicalHostName()返回的值
# 对于ipv4,基本就是localhost了 127.0.0.1 最后就是访问失败
#advertised.listeners=PLAINTEXT://your.host.name:9092
# 在不同的机器,名称不同 如mini01、mini02、mini03★★★
advertised.listeners=PLAINTEXT://mini01:9092 # broker 处理消息的最大线程数,一般情况下不需要去修改
num.network.threads= # broker处理磁盘IO 的线程数 ,数值应该大于你的硬盘数
num.io.threads= # 发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.send.buffer.bytes= # kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.receive.buffer.bytes= # 这个参数是向kafka请求消息或者向kafka发送消息的请求的最大数,这个值不能超过java的堆栈大小
socket.request.max.bytes= ############################# Log Basics #############################
# kafka数据的存放地址,多个地址的话用逗号分割 /tmp/kafka-logs-,/tmp/kafka-logs-
log.dirs=/app/kafka/logs # 默认的分区数,一个topic默认1个分区数
num.partitions= # 每个数据目录在启动时用于日志恢复和关闭时用于刷新的线程数。
num.recovery.threads.per.data.dir= ############################# Internal Topic Settings #############################
# 组元数据内部主题“__consumer_offset”和“__transaction_state”的复制因子
# 对于开发测试之外的任何内容,建议使用大于1的值来确保可用性,比如3。
offsets.topic.replication.factor=
transaction.state.log.replication.factor=
transaction.state.log.min.isr= ############################# Log Flush Policy #############################
# 在持久化到磁盘前message最大接收条数
#log.flush.interval.messages=
log.flush.interval.messages= # 持久化的最大时间间隔
#log.flush.interval.ms=
log.flush.interval.ms= ############################# Log Retention Policy #############################
# 默认消息的最大持久化时间,168小时,7天
# segment 文件保留的最长时间,超时则被删除
log.retention.hours= # 当分片的大小超过该值时,就会被删除。该功能不依赖于log.retention.hours。为 -1没有大小限制
#log.retention.bytes=
log.retention.bytes=- # 滚动生成新的segment文件的最大时间
log.roll.hours= # 单个分片的上限,达到该大小后会生成新的日志分片 1G
log.segment.bytes= # 日志分片的检测时间间隔,每隔该时间会根据log保留策略决定是否删除log分片
log.retention.check.interval.ms= # 默认为true 启用日志清理器进程在服务器上运行
log.cleaner.enable=true # 默认为true 【当前版本】 启用删除主题。 如果此配置已关闭,则通过管理工具删除主题将不起作用
delete.topic.enable=true
############################# Zookeeper #############################
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=mini01:,mini02:,mini03:,mini04:,mini05: # Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms= ############################# Group Coordinator Settings #############################
# 在开发测试环境下该值设置为0,保证启动后马上可以使用。但在生产环境下,默认值3秒更适合
group.initial.rebalance.delay.ms=
2.4. 其他配置修改
[yun@mini01 config]$ pwd
/app/kafka/config
[yun@mini01 config]$ vim producer.properties
………………
# 用于建立到Kafka集群的初始连接的主机/端口对列表。客户机将使用所有服务器,而不管这里为引导绑定指定了哪些服务器——此列表只影响用于发现完整服务器集的初始主机。
# 由于这些服务器仅用于初始连接,以发现完整的集群成员关系(可能会动态更改),因此这个列表不需要包含完整的服务器集(但是,如果服务器宕机,您可能需要多个服务器)。
bootstrap.servers=mini01:,mini02:,mini03:
………………
[yun@mini01 config]$ vim consumer.properties
………………
bootstrap.servers=mini01:,mini02:,mini03:
………………
2.5. 启动/停止kafka
[yun@mini01 ~]$ kafka-server-start.sh -daemon /app/kafka/config/server.properties # -daemon 可选参数,后台运行
# 如果是后台运行,则控制台没有下面日志信息
[-- ::,] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
[-- ::,] INFO starting (kafka.server.KafkaServer)
……………………
[yun@mini01 ~]$ kafka-server-stop.sh # 停止kafka
2.6. zookeeper命令行查看
[zk: localhost:(CONNECTED) ] ls /
[cluster, controller, brokers, zookeeper, admin, isr_change_notification, log_dir_event_notification, controller_epoch, zhang01, consumers, latest_producer_id_block, config, hbase]
[zk: localhost:(CONNECTED) ] ls /brokers
[ids, topics, seqid]
[zk: localhost:(CONNECTED) ] ls /brokers/ids
[, , ]