1 Kafka是什么
kafka是用于构建实时数据管道和数据流的应用程序。具有实时横向扩展、高吞吐量、支持大量堆积具有容错性和速度快等特点。它是一个高性能分布式消息系统。通常一个分布式流数据平台它具有三个特点:
- 发布和订阅功能,类似于消息系统
- 以容错的方式记录流
- 处理流
2 Kafka的特点
它的设计初衷就是成为统一、实时处理大数据的平台,所以它必须支持几个场景:
- 高吞吐量的日志事件流
- 能承受大量积压
- 低延迟处理消息
- 能支持分区、分布式,实时处理且容错能力。
- 持久化,消息系统一般不同提供持久化,因为消息被消费了也就没有意义了,它不像数据库。不过kafka收到消息会顺序写入日志一旦数据落盘也就实现了持久化。Kafka在设计上采用O1的磁盘结构,也就是数据访问性能不随数据量增大而增加。用户可以自己设置Kafka把消息保存多久,这样重启后已经存储的消息可以继续恢复使用。
- 高吞吐量,它设计的目的就是高吞吐量,从写入方面来说,虽然Kafka会持久化数据到磁盘,但是每次写操作都只是写入系统页缓存中,然后由OS决定什么时候写入磁盘,而且写入磁盘时充分利用顺序读写方式,Kafka采用追加方式写入只能写入到日志文件末尾且不能修改。从读取的方面来说,会先从OS的页缓存中读取,如果消息存在就直接发送到Socket,由于大量使用页缓存所以命中概率很大尤其是最新的消息。再加上同时在数据写入和数据同步时采用了零拷贝技术,采用sendFile()函数。所谓零拷贝就是用户空间到内核空间之间的拷贝,这个过程省去了,比如要读取的数据在磁盘上,那么OS会把磁盘数据会拷贝到内核读缓存中,然后直接发往网卡缓存等待发送给用户,这个过程不再经过用户空间。
- 扩展性,有良好的横向扩展能力,它依赖Zookeeper来做集群协调者,使用普通PC服务器就可以搭建大规模集群。
- 多客户端支持,JAVA、C、PYTHON、Node.js等主流语言都支持。
- 丰富的安全机制
- 数据备份,副本机制
- 轻量级,Kafka代理是无状态的,代理不记录消息是否被消费,消费者偏移量的管理由消费者自己或者组协调器来维护,集群本身也不需要生产者和消费者的状态信息。
- 支持压缩,GZIP、SNAPPY、LZ4这三种压缩方式。通常把多条消息放到一个消息集合中,然后再把消息集合放到一条消息里,从而提高压缩率。
3 Kafka核心能力
1)高吞吐量
使用延迟低至 2 毫秒的机器集群以网络有限的吞吐量传递消息。
2)可扩展性
将生产集群扩展到多达一千个代理、每天数万亿条消息、PB 级数据、数十万个分区。弹性扩展和收缩存储和处理。
3)永久存储
将数据流安全地存储在分布式、持久、容错的集群中。
4)高可用性
在可用区上有效地扩展集群或跨地理区域连接单独的集群。
4 Kafka生态系统
1)内置流处理
使用事件时间和仅一次处理,通过连接、聚合、过滤器、转换等处理事件流。
2)连接到几乎任何东西
Kafka 开箱即用的 Connect 接口与数百个事件源和事件接收器集成,包括 Postgres、JMS、Elasticsearch、AWS S3 等。
3)客户端库
读取、写入和处理大量编程语言中的事件流。
4)大型生态系统开源工具
大型开源工具生态系统:利用大量社区驱动的工具。
5 Kafka广受信任&软件易用
1)关键任务
支持关键任务用例,保证排序、零消息丢失和高效的一次性处理。
2)受到数以千计组织的信任
成千上万的企业、组织都在使用 Kafka,从互联网巨头到汽车制造商再到证券交易所。超过 500 万次的终生下载。
3)庞大的用户社区
Kafka 是 Apache 软件基金会最活跃的五个项目之一,在全球有数百个活动组织。
4)丰富的在线资源
丰富的文档、在线培训、指导教程、视频、示例项目、Stack Overflow 等。