Kafka入门介绍 - Kafka设计

目前,无论是互联网应用还是大数据平台,Kafka作为一种消息中间件已经成为一个必不可少和首选之一。本文将会以问答方式为大家简单介绍一下Kafka的一些设计实现。

Q1.在互联网应用和大数据平台海量数据场景下,Kafka是怎样保障消息的快速写入?
磁盘顺序读写,尾部写入,头部读取(read-head和write-behind技术)。数据读取与写入相互不影响,而且时间复杂度为O(1)。
Q2.同样是磁盘读写,我们能够想到MySQL InnoDB索引也是以磁盘作为存储,为何不将Kafka采用与MySQL InnoDB索引一样的磁盘存储设计,使用BTree数据结构?对于BTree查询时间复杂度O(log N),近似O(1),而且在使用BTree可以更好地实现各种事务性和非事务性语义?
1. BTree查询的复杂度O(log N)在海量数据场景下不并完全等于O(1),并且在磁盘读写场景下更不成立。因为磁盘每次寻址时间大概是10ms,而且每个磁盘同时只能执行一次寻址操作,不能并行;使用BTree结构是将内存与磁盘操作相结合,当fix cache出现越多,性能就会越差;
2. Kafka作为消息队列,不需要类似MySQL这样的条件查询;
Q3.在海量消息场景下,Kafak是怎样优化大量的磁盘io、网路io和频繁的字节拷贝的?
1. Kafka中会有一个"消息块"概念,在生产消息时,produer会将多条消息合并为一个"消息块"进行发送,broker接收到"消息块"时,直接将这个"消息块"存储在磁盘,在消费消息时,consumer直接读取到"消息块",这样实现减少网络请求开销;
2. producer、consumer、broker共享一种消息格式

你可能感兴趣的:(kafka,后端)