目的
Kafka是为了实时大量数据的中间件。它的设计是为了满足以下场景:
- 高吞吐量,支持海量事件,比如:日志的聚合
- 支持大量数据的积压,以达到离线数据的定时处理
- 分布式,容错,分区
- 低延迟消息的处理(传统消息)
架构
Kafka的设计与传统消息系统相比更类似数据库的log.
持久化
Kafka主要依赖文件系统来保存数据和缓存消息。在一般人的印象中,文件系统的读写是比较慢的。但是,文件的顺序读写的速度媲美网络速度。其主要原因是:在现代的操作系统,都提供了预读和延迟写功能,在某些情况下顺序读比内存中随机访问的速度都快(见下图)。
kafka运行在JVM上, 如果我们有5M的数据,加载到内存中,可能有10M甚至更多;其次,随着堆数据的增加,JAVA的垃圾回收速度也越来越慢。