kafka的设计:为了实现统一、实时处理大规模数据的平台;
①:具有高吞吐量
②:具有削峰作用,能够很好的处理大量积压的数据,为了能够周期性地加载离线数据进行处理
③:能够低延迟地处理普通消息
④:支持分区,分布式,实时处理
特性
1.消息持久化:
磁盘的快慢速度依赖与我们如何去应用磁盘,并且现今有预读和延迟写等技术局的支持,磁盘的读写速度没有想想的那么慢。
kafka选择以文件系统来存储数据,消息系统数据持久化一般采用为每个消费者队列提供一个B树或者其他支持随机访问的数据结构来维护消息的元数据,B树的时间复杂度为O(logn),一般来说磁盘的寻道时间在10ms以内,对一块磁盘来说,同一时刻只能有一个磁头来读写磁盘,这样在并发操作上,IO能力将会随着数据量的增大而急剧下降。
因为Kafka的设计是消息进行顺序追加,所以kafka在设计上采用时间复杂度为O(1)的磁盘结构,只要磁盘足够大就可以一直追加,Kafka对消息的处理机制,可以根据分区大小对消息进行处理,也可以根据消息已存储的时间长度对消息进行处理,这种持久化使得kafka机器在重启后,已存储的消息可继续恢复使用。
2.高吞吐量:
kafka支持每秒百万级的消息
①:高吞吐量的设计,充分利用磁盘的顺序读写;
②:kafka在数据写入及数据同步采用了零拷贝技术,采用sendFile()函数,此函数是在两个文件描述符之间直接进行数据传递,完全在内核中进行,减少了用户态到内核态之间转化的时间,效率极高;
③:支持数据压缩和批量发送,将每个主题划分为多个分区;
3.消息压缩和批量发送:
kafka通常是将多条消息压缩成messageSet,然后将messageSet放到一条消息里发送出去,从而提高压缩比提高吞吐量;
4.数据备份:
kafka可以为每个主题指定副本数,对数据进行持久化备份
5.安全机制:
①:通过SSL,支持消费者和生产者与broker链接时的验证
②:支持broker与ZooKeeper连接时身份认证
③:支持消息传输时加密
④:客户端读写权限认证
应用场景
1.消息系统:因为其具备高吞吐量、内置的分区、持久化、分布式等特点。
2.监控系统:如使用kafka+ELK(ElasticSearch、Logstash和Kibana)整合应用监控系统。
3.网站用户行为追踪:可以将用户行为和操作习惯等消息发送到kafka集群上,然后使用spark等对其处理
4.流处理
5.持久性日志:可以在多个节点间进行备份