-
Notifications
You must be signed in to change notification settings - Fork 0
01 kafka学习笔记
Jinxin Chen edited this page Dec 20, 2019
·
1 revision
分布式的,基于发布/订阅模式的消息队列
发布订阅模式2种:
- 队列主动推,但受限于消费者处理速度
- 消费者主动拉,但需不断轮询
原理图
- producer发送消息给broker
- broker包含多个topic
- topic包含多个partition(不同服务器,且有副本)
- 同一个topic可以被同一个Consumer group中的某个consumer消费一次
- zookeeper用户保存kafka集群的一些信息
- 消费者要记录消息的offset,会在zk/kafka(0.9版本变化)记录信息
kafka.apache.org
启动:
- 每台执行:bin/kafka-server-start.sh -daemon config/server.properties
- 写bash脚本批量执行
副本数需<=broker数量,分区数量没有此限制
kafka没有配主副节点,组集群主要是通过将brokerid注册到zookeeper的方式
总结:10
topic是逻辑上的概念,partition是物理上的概念,topic以topic_partition文件夹方式命名
生产者的消息会追加到log文件末尾,为了防止log文件过大,kafka采取了分片(segment)和索引(index)机制。
index文件以数组的方式存储消息的偏移量和大小,segment文件大小为1G,文件名为该文件的起始消息offiset。
查找某条消息的步骤为,先通过二分查找找到消息在哪个segment文件,然后通过index查找数据的偏移量和大小,然后通过seek方法获取数据
数据存储到哪个分区:
- 直接指定
- key计算hash然后取谋
- 随机生成一个整数,然后自增rr
数据可靠性:producer发送数据,等待ack,那么,何时发送ack呢:
- 半数以上完成同步,就发ack,延迟低,但容忍n台节点故障需2n+1个副本
- 全部完成同步,才发ack,延迟高,但只需n+1个副本
kafka选择的第2种,但做了优化,ISR
akcs参数配置: 0. producer不等待brocker的ack
- producer等待broker的ack,leader落盘成功就返回ack -1. producer等待broker的ack,leader和follower全部落盘才返回ack
注意,当-1时,isr的follower=1时,也有可能丢数据,此时相当于副本数=1
15, 6:53