背景
项目里使用了kafka和spark作消息的流式处理,但是我对kafka一窍不通。每次测试找我kafka都是傻坐着,主管让我花时间学习kafka。
image.png
kafka介绍
在大数据时代,分析,处理和挖掘海量数据成为了目前技术领域的热点和难点。kafka是一款开源,轻量,分布式,可分区,可备份的消息系统。kafka能够很好地处理活跃的流数据,使得数据在各个子系统中高性能、低延时地不停流转。
kafka特性
消息可持久化
kafka存储数据使用的是文件系统。只要文件系统足够大,数据就可以一直追加。kafka也提供了数据最大保存时间,用户可以设置。因为是写到硬盘上,所以节点故障,重启后数据可恢复
高吞吐量
-
kafka使用文件系统存储数据,按理说性能不会太高。但kafka采用顺序写,顺序写比文件的随机写快6000倍;
-
在写入时采用零拷贝技术(在两个文件描述符(打开或新建文件会返回文件描述符,读写文件都需要这个东西)之间进行操作,完全内核操作),避免了文件从用户态转变为内核态的数据拷贝;
-
kafka支持数据压缩和批量发送;
-
kafka每个主题有多个分区;
扩展性
因为依赖zk注册,只要注册服务。就可以在多态廉价服务器上搭建集群
多客户端
支持java,scala,c,c++,python,go,erlang,ruby,node.js等,还好我都认识。
kafka streams
kafka 0.10后引入了kafka stream,一个专注于流处理的jar包。
安全机制
生产者,消费者连接代理要认证,zk连接代理要认证,通信数据加密,客户端读写也要认证。
数据备份
kafka可以为每个主题指定副本数,进行持久化备份
轻量
kafka的代理是不会记录消息是否被消费,消费偏移量的管理交由消费者自己或组协调器来维护。
消息压缩
kafka支持gzip,snappy,lz4三种压缩方式,把多条消息压缩成messageset,再放到一个消息中。
kafka和其他消息中间件比较
https://rocketmq.apache.org/docs/motivation/
kafka应用场景
- 消息系统
- 应用监控,kafka接收应用程序的健康相关的指标
- 用户行为追踪。kafka和spark集成,进行数据分析。很大众的一种解决方案
- 需要将流数据交给其他流计算框架处理
- 持久化日志。利用kafka的消息持久化特性,同时kafka支持和hdfs和flume整合,方便数据转移
网友评论