背景

项目里使用了kafka和spark作消息的流式处理,但是我对kafka一窍不通。每次测试找我kafka都是傻坐着,主管让我花时间学习kafka。

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/d...

kafka应用场景

  1. 消息系统
  2. 应用监控,kafka接收应用程序的健康相关的指标
  3. 用户行为追踪。kafka和spark集成,进行数据分析。很大众的一种解决方案
  4. 需要将流数据交给其他流计算框架处理
  5. 持久化日志。利用kafka的消息持久化特性,同时kafka支持和hdfs和flume整合,方便数据转移

木木甫
494 声望23 粉丝

已工作的应届生。希望能和大家多多交流技术问题,