1kafka架构
生产者
消费者
broker :中间包含一个或者多个 topic
一个topic中有一个或者多个partition这个可以设置
每一条消息只能来自一个topic
生产数据和消费数据的时候必须要指定 是哪一个topic
*partition 讲解
如果不备份的情况下 只分布在一个broker上
一个partition中包含了多个segment,一个segment对应一个文件, 数据会append到一个segment,单条数据不能删除和修改,当保存时间到期之后 会直接对segment进行删除
kafka的最小单位是partition offset保存在segment的index中
*partition可以设置成和broker一致
通过Partition实现了并行处理和水平扩展
Partition是Kafka(包括Kafka Stream)并行处理的最小单位
不同Partition可处于不同的Broker(节点),充分利用多机资源
同一Broker(节点)上的不同Partition可置于不同的Directory,如果节点上有多个Disk Drive,可将不同的Drive对应不同的Directory,从而使Kafka充分利用多Disk Drive的磁盘优势
2 kafka的副本数 replica
当某个topic的replication-factor为N且N大于1时,每个partion都会有N个副本(replica)
replica的个数小于等于broker数:对每个partition而言每个broker上只会有一个replica,因此broker ID表示replica
所有partition的所有replica默认情况会均匀分布到所有broker上
kafka为什么性能高
(1)高效实用磁盘
(2)零拷贝(减少了i/o)
(3)数据的批处理和压缩
Producer和Consumer均支持批量处理数据,从而减少了网络传输的开销 (少次多量)
Producer可将数据压缩后发送给broker,从而减少网络传输代价。目前支持Snappy, Gzip和LZ4压缩
(4)设置 partition的个数和broker保持一致
(5)ISR(In-Sync Replicas)
对每个消息都做f+1的备份:以单个消息为进行备份的基本单位,进行可靠性保障
ISR最核心的思想:以一段时间而非以一个消息为基本单位,进行可靠性保障