Kafka基本逻辑:
1、类似于rabbitmq
之类的消息队列,消息的传递通过topic
(主题)进行,Producer
(生产者)通过发布topic
进行消息的发布,server
(消费者)通过与cluster
之间建立长连接的方式,消费topic
主题。
2、Topic可细化为多个Partition
(分区),一个分区只属于一个主题,在物理层面上的具体表现为多个可追加的Log
(日志)文件,对于大文件Kafka会将Log进行切分。
3、Log写入为顺序写入,仅有最后一个LogSegment
(日志分片)写入数据,不同LogSegment
存在一定的offset
(偏移量)值唯一,用于区分。
4、Kafka仅维护分区有序,主题之间可跨broker
。
5、多副本容灾:
即通过提升副本数量进行容灾,将同一个分区的多个副本会被均匀分配到集群中的不同 broker 上(副本之间同步消息存在延时,数据并非完全一致)。
副本之间为“一主多从”的关系,即存在一个leader
与多个follower
,follower
仅负责消息的备份,当’leader’出现故障时,自动在多个follower
中进行选举选出新的leader
对外正常提供服务。
Kafka配置文件详解
配置项 | 解释 | 类型 | 默认值 |
---|---|---|---|
auto.create.topics.enabl | 启用topic的自动创建 | boolean | true |
auto.leader.rebalance.enabl | 是否允许leader平衡。后台线程会定期检查并触发leader平衡。 | boolean | true |
background.threads | 用于处理各种后台任务的线程数量 | int | 10 |
broker.id | 用于服务的broker id(唯一值) | int | -1 |
compression.type | 为特点的topic指定一个最终压缩类型。此配置接受的标准压缩编码方式有(‘gzip’, ‘snappy’, ‘lz4’)。此外还有’uncompressed’相当于不压缩;'producer’意味着压缩类型由’producer’决定。 | string | producer |
delete.topic.enable | 是否允许删除topic。如果关闭此配置,通过管理工具删除topic将不再生效。 | boolean | true |
listeners | 监听器列表 。合法监听器列表的示例:PLAINTEXT:// myhost:9092,SSL://:9091 CLIENT://0.0.0.0:9092,REPLICATION:// localhost:9093 | string | null |
log.dir | 保存日志数据的目录 | string | /tmp/kafka-logs |
log.dirs | 保存日志数据的目录,如果未设置将使用log.dir的配置。通常用于多日志存储位置的设置 | string | null |
log.flush.interval.messages | 在将消息刷新到磁盘之前,在日志分区上累积的消息数量。即触碰到阈值时,强制将消息刷入磁盘 | long | 9223372036854775807 |
log.flush.interval.ms / log.flush.scheduler.interval.ms | 每间隔多长时间,强制将内存中的topic消息刷入磁盘(以毫秒为单位)。如果未设置,则使用log.flush.scheduler.interval.ms中的值。 | long | null |
log.retention.bytes | 日志删除的大小阈值(单位:bytes) | long | -1(永不删除) |
log.retention.hours / log.retention.minutes / log.retention.ms | 日志删除的时间阈值(小时/分钟/毫秒为单位)hours最大 | int | 168 |
log.roll.hours | 到达阈值时间,强制新建新的segment | int | 168 |
log.segment.bytes | 单个segment日志文件阈值大小(单位:bytes) | int | 1073741824 |
log.segment.delete.delay.ms | 日志文件真正从文件系统中删除前的保留时间(log.retention.hours等只是注明delete,文件并没有被删除) | long | 60000 |
num.io.threads | 服务器用于处理请求建立的线程数,硬盘IO配置线程数量为cpu核数2倍 | int | 8 |
num.network.threads | 服务器用于从接收网络请求并发送网络响应的线程数,网络IO配置线程数量为cpu核数加1 | int | 3 |
queued.max.requests | 网络线程最大请求数可配合num.io.tureads进行修改 | int | 500 |
replica.lag.time.max.ms | leader与follower之间的心跳时间,超时或follower没有消费offset,则leader自动将该follower剔除节点 | long | 10000 |
zookeeper.connection.timeout.ms | 与ZK server建立连接的超时时间,没有配置就使用zookeeper.session.timeout.ms | int | null |
zookeeper.session.timeout.ms | ZooKeeper的session的超时时间,超过这个时间就认为是无效的消费者 | int | 6000 |
connections.max.idle.ms | 连接空闲超时:服务器socket处理线程空闲超时关闭时间 | long | 600000 |
controlled.shutdown.max.retries | 当发生失败故障时,由于各种原因导致关闭服务的次数 | int | 3 |
controlled.shutdown.retry.backoff.ms | 重试等待时间,单位:毫秒 | long | 5000 |
Kafka简单部署
1、JDK环境安装
略
2、配置安装zookeeper
(1)解压tar包
直接用就行
(2)修改配置文件——单节点简版
# ZooKeeper服务器心跳时间,单位为ms
tickTime=2000
# 允许follower连接并同步到leader的初始化连接时间,以tickTime的倍数来表示
initLimit=10
# leader与follower心跳检测最大容忍时间,响应超过syncLimit*tickTime,leader认为
# follower“死掉”,从服务器列表中删除follower
syncLimit=5
# 数据目录
dataDir=/tmp/zookeeper/data
# 日志目录
dataLogDir=/tmp/zookeeper/log
# ZooKeeper对外服务端口
clientPort=2181
创建myid
文件,作为zookeeper
节点的唯一标识,地点位于配置文件中datadir
指定的路径
(3)启动
[root@node1 conf]# zkServer.sh star
3、安装kafka broker
(1)解压tar包
直接用就行
(2)修改配置文件
conf]# zkServer.sh star
3、安装`kafka broker`
(1)解压tar包
直接用就行
(2)修改配置文件
(3)启动