专栏名称: java一日一条
主要是讲解编程语言java,并且每天都推送一条关于java编程语言的信息
目录
相关文章推荐
51好读  ›  专栏  ›  java一日一条

面试问:Kafka为什么速度那么快?

java一日一条  · 公众号  · Java  · 2019-06-14 19:25

正文

请到「今天看啥」查看全文


2、顺序写入JVM的GC效率低,内存占用大。使用磁盘可以避免这一问题

3、顺序写入系统冷启动后,磁盘缓存依然可用


下图就展示了Kafka是如何写入数据的, 每一个Partition其实都是一个文件 ,收到消息后Kafka会把数据插入到文件末尾(虚框部分):



这种方法有一个缺陷——没有办法删除数据 ,所以Kafka是不会删除数据的,它会把所有的数据都保留下来,每个消费者(Consumer)对每个Topic都有一个offset用来表示读取到了第几条数据 。



两个消费者:

1、顺序写入Consumer1有两个offset分别对应Partition0、Partition1(假设每一个Topic一个Partition);

2、顺序写入Consumer2有一个offset对应Partition2。


这个offset是由客户端SDK负责保存的,Kafka的Broker完全无视这个东西的存在;一般情况下SDK会把它保存到Zookeeper里面,所以需要给Consumer提供zookeeper的地址。


如果不删除硬盘肯定会被撑满,所以Kakfa提供了两种策略来删除数据:


1、顺序写入一是基于时间。

2、顺序写入二是基于partition文件大小。







请到「今天看啥」查看全文