乐趣区

我太难了kafka

背景

项目里使用了 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 整合,方便数据转移
退出移动版