Kafka是什么


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 等。