深入理解kafka(六)深入服务端

6深入服务端
6.1协议设计

6.2时间轮

6.3延时操作
延时生产
如果客户端发送消息时将acks参数设置为-1,意味着要等待ISR集合中的所有副本都确认收到消息后才能正确响应,或者捕获超时异常
超时时间参数由request.timeout.ms配置,默认30000(30s)
延时拉取
follower拉取leader 收集不到足够多的消息(fetch.min.bytes默认我1)时,创建延时拉取操作
消费者客户端拉取消息
事务隔离级别设置isolation.level默认为read_uncommitted,改为read_committed拉取不到写入但未提交的消息
6.4控制器
kafka会有多个broker,其中一个会被选为KafkaController
6.4.1 控制器的选举及异常恢复
controller职责:
监听分区变化
监听主题变化
监听broker变化
从zk读取当前所有主题、分区、broker相关信息管理
启动并管理分区状态机和副本状态机
更新集群的元数据信息
如果参数auto.leader.rebalance.enable设置为true,则还会开启一个名为auto-leader-rebalance-task的定时任务来负责负载均衡
6.4.2 优雅关闭
第一步 jps查看进程号PIDS 第二步 使用kill -s TERM PIDS
先决条件:
controlled.shutdown.enable=true(默认为true)
controlled.shutdown.max.retries=3(默认为3)
controlled.shutdown.retry.backoff.ms=5000ms(默认为5000ms)
6.4.3 分区leader的选举
原leader副本下线OfflinePartitionLeaderElectionStrategy
此时分区重新选取leader是根据AR的顺序而不是ISR的顺序
如果ISR集合没有可用的副本,检查unclean.leader.election.enable参数(默认为false),如果为true允许从非ISR列表重选举leader,从AR中找到第一个存活的副本即为leader
分区重分配时(ReassignPartitionLeaderElectionStrategy),找AR中第一个存活副本,且在ISR中
优先副本选举时(PreferredReplicaPartitionLeaderElectionStrategy),AR中第一个副本
优雅关闭时(ControlledShutdownPartitionLeaderElectionStrategy),找AR中第一个存活副本,且在ISR中,且副本不在被关闭的节点上
6.5参数解密
如果broker端没有显示指定ip,bootstrap.server最好使用主机名
6.5.1 broker.id
手动配置:默认为-1,必须>=0才能正常启动
自动配置:
broker.id.generation.enable(默认为true)
reserverd.broker.max.id(默认为1000),自动生成的id>1000
6.5.2 bootstrap.servers
bootstrap.servers 引导程序的服务地址 配置kafka集群 xxx.xxx.xxx.xxx:9092,xxx.xxx.xxx.xxx:9092,xxx.xxx.xxx.xxx:9092
metadata.broker.list 元数据节点列表 逐渐弃用
zookeeper.connect zk节点列表,topic元数据本身就存在于zk之中
上面3个API配置参数,分别对应脚本参数--bootstrap-servers,--broker-list,-zookeeper
6.5.3 服务端参数列表
unclean.leader.election.enable
auto.create.topics.enable 是否开启自动创建主题 默认true
auto.leader.rebalance.enable 是否开启自动均衡 默认true
background.thread 执行后台任务的线程数 默认10
compression.type 压缩类型 默认producer
delete.topic.enable 是否可以删除主题 默认true
leader.imbalance.check.interval.seconds 检查不均衡周期 默认300
leader.imbalance.per.broker.percentage 允许不均衡比例 默认10
log.flush.interval.message 触发刷盘消息大小 默认Long.MAX_VALUE
log.flush.interval.ms 刷盘时间间隔 默认null
log.flush.scheduler.interval.ms 检查日志文件是否需要刷新的时间间隔 默认Long.MAX_VALUE
log.retention.bytes 日志文件保留大小 默认-1
log.retention.hours 日志保留时间 默认168(7天)
log.retention.minutes 默认null
log.retention.ms 默认null
log.roll.hours 日志段强制滚动 默认168(7天)
log.roll.ms 默认null
log.segment.bytes 日志段最大值 默认1073741824(1GB)
log.segment.delete.delay.ms 从操作系统删除文件前等待时间 默认60000(60秒)
min.insync.replicas ISR最少副本数 默认1
num.io.threads 处理请求线程数,包括磁盘IO 默认8
num.network.threads 处理接受和返回响应线程数 默认3
log.cleaner.enable 是否开启日志清理功能 默认true
log.cleaner.min.cleanable.ratio 可执行操作的最小污浊率 默认0.5
log.cleaner.threads 日志清理后台线程数 默认1
log.cleanup.policy 日志清理策略 默认delete
log.index.interval.bytes 每隔多少字节消息写入就添加一条索引 默认4096
log.index.size.max.bytes 索引文件的最大值 10485760(10MB)
log.message.format.version 消息格式版本 默认kafka版本号
log.message.timestamp.type 消息中的时间戳类型 默认CreateTime
log.retention.check.interval.ms 日志清理检查周期 默认300000(5分钟)
num.partitions 主题默认分区数 默认1
reserved.broker.max.id broker.id能配置的最大值,+1也是自动生成broker.id的最小值 默认1000
create.topic.policy.class.name 创建主题时合法性验证策略 默认null
broker.id.generation.enable 是否自动生成broker.id 默认true
broker.rack 配置机架信息 默认null

advertised.listeners
background.threads 指定后台任务的线程数 默认10
compression.type 压缩类型 默认producer
follower.replication.throttled.rate
leader.replication.throttled.rate
listener.security.protocol.map
listeners
log.cleaner.backoff.ms
log.cleaner.dedupe.buffer.size
log.cleaner.delete.retention.ms
log.cleaner.io.buffer.load.factor
log.cleaner.io.buffer.size
log.cleaner.io.max.bytes.per.second
log.cleaner.max.compaction.lag.ms
log.cleaner.min.cleanable.ratio
log.cleaner.min.compaction.lag.ms
log.cleaner.threads
log.cleanup.policy
log.flush.interval.messages
log.flush.interval.ms
log.index.interval.bytes
log.index.size.max.bytes
log.message.downconversion.enable
log.message.timestamp.difference.max.ms
log.message.timestamp.type
log.preallocate
log.retention.bytes
log.retention.ms
log.roll.jitter.ms
log.roll.ms
log.segment.bytes
log.segment.delete.delay.ms
max.connections
max.connections.per.ip
max.connections.per.ip.overrides
message.max.bytes
metric.reporters
min.insync.replicas
num.io.threads
num.network.threads
num.recovery.threads.per.data.dir
num.replica.fetchers
principal.builder.class
replica.alter.log.dirs.io.max.bytes.per.second
sasl.enabled.mechanisms
sasl.jaas.config
sasl.kerberos.kinit.cmd
sasl.kerberos.min.time.before.relogin
sasl.kerberos.principal.to.local.rules
sasl.kerberos.service.name
sasl.kerberos.ticket.renew.jitter
sasl.kerberos.ticket.renew.window.factor
sasl.login.refresh.buffer.seconds
sasl.login.refresh.min.period.seconds
sasl.login.refresh.window.factor
sasl.login.refresh.window.jitter
sasl.mechanism.inter.broker.protocol
ssl.cipher.suites
ssl.client.auth
ssl.enabled.protocols
ssl.endpoint.identification.algorithm
ssl.key.password
ssl.keymanager.algorithm
ssl.keystore.location
ssl.keystore.password
ssl.keystore.type
ssl.protocol
ssl.provider
ssl.secure.random.implementation
ssl.trustmanager.algorithm
ssl.truststore.location
ssl.truststore.password
ssl.truststore.type
unclean.leader.election.enable

你可能感兴趣的:(深入理解kafka(六)深入服务端)