相关关联:
zookeeper在kafka中的作用有哪些?(可通过ZooViewer工具来查看kafka相关集群信息)
- zookeeper帮助kafka做了配置的管理(节点、分区、topic)
- kafka节点的选举依赖kafka来实现
kafka安装必须先安装zookeeper
kafka管理界面:kafka-manager(至少要JDK11)、kafka-eagle
topic自动创建配置,在生产环境一般需要关闭(若开启,手动删除topic后,kafka会自动创建topic)
副本(partition)数不能大于机器数(broker),否则创建的时候会报错(多个副本放在一个broker上违背了设计原则,一个broker宕机broker上多个副本信息都丢失了,和一个副本信息丢失是等价的)
消费者组
同一个消费者组内的消费者不能同时消费同一个topic内相同的partition,当消费者和partition建立消费关系时(哪个消费者消费哪个patition),对应的消费关系会写入zk不会发送改变
image.png
生产者事务
开启事务、成功提交、失败抛弃
使用的是2PC,两阶段提交思想(都成功再写入磁盘,失败则抛弃)
事务操作流程图.png
kafka消息幂等
依赖的两个参数
1、PID(Producer ID)生产者id
2、sequence number (消费者)针对同一个partition,sequence number是连续的
同一个会话才会有幂等,也就是同一个线程,如果生产者重启,就没法保证幂等了
producer发送消息
image.png生产者通过accumelator.append()累加器方法进行消息的拼接,批量发送
accumelator累加器对象本质是一个currentHashMap
pros.put("acks","0");//生产者不等待broker的ack通知,直接认为发送的消息成功
pros.put("acks","1");//(默认)只要leader节点写入成功则然后ack通知
pros.put("acks","-1");//-1或者all需要做所有副本都写入成功才发送ack
image.png
稀疏索引
kafka中index文件中offset和position的对应关系就是一个稀疏索引,(隔一段时间给offset建立索引)
kafka中log文件内容和索引文件中index对应的关系
稀疏索引可以根据文件大小或者时间来控制稀疏索引的稀疏度,kafka中使用的是消息的大小来控制消息度,可用通过上图中的配置来控制
kafka索引
.index偏移量(offset)索引文件
.timeindex时间戳(timestamp)索引文件
log.message.timestamp.type=CreateTime/LogAppendTime,时间戳记录时间的时机分为消息创建时的时间/消息在broker刷盘的时间
.timeindex时间戳(timestamp)索引的作用:
前提:每一个消息都必须有一个时间戳
1、产生segement需要根据时间(比如每周生成一个segement)
2、根据时间来清理历史消息
kafka的索引是一个hash索引
kafka存储总结:
image.png消息清理策略
消息清理策略注:compact,可理解为压缩,相同key的消息取最新的消息进行压缩存储(如下图)
image.png
消费者
消费者消费策略
RangerAssignor(默认),消费者随机消费paritition上的消息
RoundRobinAssignor,消费者轮询消费parition上的消息
StickyAssignor,消费者均匀的消费partition上的消息
kafka为什么这么快
- 顺序读写(避免了了磁盘寻址,大大提高了读写效率)
- 索引
- 批量读写和文件压缩
- 零拷贝
网友评论