Kafka
|
DistributedLog
|
数据分片与分布
|
Kafka分区中的数据存储在若干个代理服务器上,每个代理服务器中的数据都在本地被切分成多个分区文件。
|
一个DistributedLog流的数据被分成多个日志分片,日志分片被均匀分布在多个存储节点上。
|
数据持久化
|
数据在超过配置的保留时间之后会被删除,或都被压缩,即只保留单个主键的几个最新值。
|
数据可以在超过配置的保留时间之后被删除,或者直接把某个位置之前的日志清除掉。
|
写操作
|
通过代理服务器可以并行写入。
|
通过写入代理可以并行写入,通过核心库只能串行写入。
|
读操作
|
从主代理服务器上读出。
|
可以从任何有数据的存储节点上读出。
|
数据复制
|
ISR (In-Sync-Replica,同步副本)复制:主和从都是代理服务器。
|
Quorum投票复制:主是写入代理,从是Bookie。
|
复制修复
|
通过增加新的副本来从主代理服务器上拷贝所有数据。
|
通过Bookie的自动恢复机制来保证复制因子。
|
集群扩展
|
增加新代理服务器时需要重新分配分区,以使得整个集群负载均衡。要严密跟进每个分区的状态,保证迁移操作不会占满网络和磁盘I/O。
|
增加写入代理或Bookie时不需要做数据重分布,新的日志分区会自动分配到新加入的Bookie上。
|
存储
|
每个分区中存储文件(文件的集合)。
|
交错存储格式。
|
持久性
|
只写到文件系统的页缓冲中。可以配置只等待主的确认,或者等待所有副本的确认,才认为写入是成功的。
|
所有写入操作都是通过显式的fsync操作持久化到硬盘上的。等到超过配置数量的Bookie的确认之后才认为写入是成功的。
|
I/O隔离
|
没有物理I/O隔离,依靠文件系统缓冲。
|
有物理I/O隔离,读写在不同磁盘上。
|