支持大量的事件流, 如日志aggregation
优雅的处理巨量数据日志以支持周期性的离线数据加载
低延迟提交
支持分区, 分布式, 实时处理
当数据发送到其它系统时, 需要知道这个系统是可以容错的(fault-tolerance...)
kafka为了做到这一点, 系统设计更加接近数据库的日志系统而非传统消息队列
难点
硬盘读写问题
写入银盘慢?...转的机械硬盘, 线性写入的性能大概是600MB/s, 而随机写入的性能大概是 100K/s, 相差6000多倍
现代操作系统一般都会有缓存, 也就是写入文件时会先写入内存cache 再写入硬盘, 所以数据会保存两份..., 或者更多
更糟糕的是使用jvm的场景, 1. java 对象的额外数据很大, 一般会是数据的两倍甚至更多. 2....在硬盘数据结构上kafka不选择常用的Btree, 虽然有O(logN)的速度, 但是机械硬盘并不如此, 机械硬盘每一次跳动要10ms
kafka 的消息被消费后, 并不会立即删除, 而是会保留一段时间