消息队列-Kafka Broker(主见)
读视者谓明,读听者谓聪。
——《韩非子·外储说右上》
前言
最近说忙其实也不忙,抽时间留下笔墨,确实又被琐碎事情打乱,当然懒惰是原罪(不好意思,请饶恕,并未说Rapper懒惰,好歹人家还是说唱新世代的冠军,哈哈,暴露了自己伪黑怕迷)。
之前定的主题“Broker”,构思了几个大纲,但发现写出来的内容并非很多,容易误解伪水文的劣迹。(哈哈,LZ的内心戏真多,搞得自己文章有人看似的,哈哈,打脸了)
Broker
Kafka多台服务器组成的集群叫做Kafka的Broker,每个节点就是一个broker,Broker其实就是一个中间代理,Kafka producer 往broker里指定的topic写消息,Kafka consumer从broker里指定的topic拉取消息。
Broker配置
broker.id
每一台服务器都有一个broker.id,如果没有,则会自动生成一个唯一的broker.id,默认值为-1。为了避免不同的broker.id冲突,zookeeper生成这个broker.id是从最开始的值+1.
数据结构(摘抄于官网)
Type: int
Default: -1
Valid Values:
Importance: high
Update Mode: read-only
启动Broker集群时,每个broker会是实例化一个KafkaController,并将该brokerId注册到Zookeeper相应的节点里,即在Zookeeper的broker/ids目录下创建一个broker的id为名称的节点,这个节点就是用来检查broker是否健康的,当broker下线后,就会删除掉这个节点。
配置:
-
config/server.properties
默认情况下broker.id值为-1,Kafka broker的id值必须大于等于0时才有可能正常启动 -
meta.properties
#Thu Dec 3 09:03:04 CST 2020
version=0
broker.id=1
会自动带一个版本号,一般固定为0
- 自动生成功能
broker.id.generation.enable和reserved.broker.max.id来配合生成新的broker.id。
broker.id.generation.enable:用来配置是否开启自动生成broker.id的功能,默认情况下为true,即开启此功能。
reserved.broker.max.id:自动生成的broker.id是有一个基准值的,即自动生成的broker.id必须超过这个基准值,这个基准值通过reserved.broker.max.id参数配置,默认值为1000,也就是说默认情况下自动生成的broker.id从1001开始。
原理:自动生成broker.id的原理是先往/brokers/seqid节点中写入一个空字符串,然后获取返回的Stat信息中的version的值,然后将version的值和reserved.broker.max.id参数配置的值相加可得
log.dirs
用于保存数据的目录
数据结构(摘抄于官网)
Type: string
Default: null
Valid Values:
Importance: high
Update Mode: read-only
另外:
log.dir: 如果log.dirs没有设置,则使用数据的路径是这个配置,一般情况下,log.dir用来配置单个根目录,log.dirs用来配置多个根目录。
Type: string
Default: /tmp/kafka-logs
Valid Values:
Importance: high
Update Mode: read-only
值得一提的是,这个配置log并不是通常说的日志记录,而是持久化的消息。当创建一个主题时,如果对应的Broker存在副本,就会创建一个{topic}-{partition}的目录,该目录下有.index、.log、.timeindex、.leader-epoch-checkpoint文件。
broker启动后,log.dir目录中会有多个文件及目录,文件有cleaner-offset-checkpoint、log-start-offset-checkpoint、recovery-point-offset-checkpoint、replication-offset-checkpoint、meta.properties。
broker.rack
架的代理。这将用于架知道复制任务容错。例子:“RACK1”、“us-east-1d”
Type: string
Default: null
Valid Values:
Importance: medium
Update Mode: read-only
zookeeper.connect
Zookeeper以hostname:port的字符串形式来连接,为了允许其中一台Zookeeper节点下线,可以配置多个hosts,如hostname1:port1,hostname2:port2,hostname3:port3
.也可以配置一个Zookeeper chroot path最为连接的一部分,如hostname1:port1,hostname2:port2,hostname3:port3/chroot/path
数据结构(摘抄于[官网]
Type: string
Default:
Valid Values:
Importance: high
Update Mode: read-only
Broker 选举
待续。。。
后序
下期预告,敬请关注:
(六)消息队列-Kafka 序列化(给予)
本文地址:https://blog.csdn.net/zhanshenzhi2008/article/details/109955537
上一篇: 从零开始学架构(四)需求分析
下一篇: 微服务架构设计基础之DDD领域驱动设计
推荐阅读
-
浅谈Java消息队列总结篇(ActiveMQ、RabbitMQ、ZeroMQ、Kafka)
-
IOT项目中Redis与kafka做消息队列比较:Redis逐渐淘汰
-
消息队列的作用以及kafka和activemq的对比
-
开源组件系列(4):分布式消息队列(Kafka)
-
Kafka-高性能的分布式消息队列
-
Flume 读取RabbitMq消息队列消息,并将消息写入kafka
-
通过pykafka接收Kafka消息队列的方法
-
SQL Server Service Broker创建单个数据库会话(消息队列)
-
消息队列(rocketMq、kafka、rabbitMq)学习、使用、理解
-
消息队列-Kafka Broker(主见)