什么是Kafka
Kafka是一个分布式消息队列,用于构建实时数据管道和流应用程序。它具有水平可扩展性,容错性,快速性。在各大互联网公司生产环境中广泛使用,目前已经有很多分布式处理系统支持使用Kafka,比如,Spark、Strom、Flume等
Kafka是一个分布式流平台,用于发布和订阅记录流。Kafka可以用于容错存储。Kafka将主题日志分区复制到多个服务器。Kafka的设计目的是为了让你的应用能在记录生成后立即就能处理。Kafka的处理速度很快,通过批处理和压缩记录有效地使用IO。Kafka会对数据流进行解耦。Kafka用于将数据流到数据湖、应用和实时流分析系统中。Kafka主要应用于实时信息流的大数据收集或者实时分析(或者两者兼有)。Kafka既可以为内存微服务提供服务,也可以用于向复杂事件流系统和IoT/IFTTT式自动化系统反馈事件。
Kafka消息队列
-
传统的消息通信方式
(1) Socket通信协议 —— 端到端通信
缺点:
a. 服务器端和客户端必须同时在线(两端任何一端不在线都无法传输数据);
b. 传输大量数据时,数据安全不完备(如果传一个文件会正常接收,如果传2个G的文件那么会容易出现丢包的情况),对网络要求极高。(2)文件服务器(ftp)
ftp的出现是解决soket的缺点, 不用同时在线,解决超大文件上传,下载问题
f指的是文件形式,一般指超大文件,电影等。如果传2G电脑用Socket,容易丢包,socket必须两端同时在线-
优点:
解决了socket的缺点 -
缺点:
a. 实时性比较差(socket客户端和服务器端发送消息时接收到数据,ftp不需要同时在线)
b. 本地磁盘IO读写(传输文件写到磁盘);
(3)共享数据库方式(Database) (大家都访问同一个库)
- 优点:
数据库连接池有限的 (一边往数据库里插数据,一边从数据库里获取数据) - 缺点:
系统间访问共享数据库比较难实现:因业务需求很难将数据库共享(例如淘宝数据库和美团的数据库);
(4)JMS(Java Message Services)协议
JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。通过JMS协议,可以通过不同平台互相发送消息,所以要求每个平台都要对应相应的接口开发程序,需要面向业务编程
缺点:具体相关业务的需求
a. 点对点(一对一模式)
一旦一个消息被阅读,该消息将被从队列中移走。
(queue,只要有一个consumer消费,就会从队列中移除,采用拉的方式)
b. JMS主题(一对多)
一种支持发送消息给多个订阅者的机制(采用推的方式)。 -
-
KAFKA消息队列
系统解耦、削峰填谷、定时任务、异步通知等等
消息队列是在JMS基础上开发出来的,它没有queue队列,和JMS一样有topic,consumer group,每一个topic可以被每一个consumer group的一个consumer消费即如果有两个组A 、B :
A组中有 a1-consumer 、a2-consumer、 a3-consumer
B组中有 b1-consumer、 b2-consumer、 b3-consumer
那么A组中任意某一个consumer消费了,会将这个组从组队列中移除,即该组其他consumer不能再消费。
B组同理如果想让a1 a2 a3 b1 b2 b3都消费主题,可以分别给它们单独设组,
(即只要组成员有一个消费就从该组队列移除,类似于queue)
Kafka的特点
-
速度快。
Kafka基于zero copy原则,深度依靠操作系统内核实现快速移动数据,能将数据记录分批处理。这些批次数据可以通过端到端的方式从生产者到文件系统(Kafka主题日志)再到消费者。批处理能实现更高效的数据压缩并减少I / O延迟。Kafka将不可变的提交日志写入连续磁盘,从而避免了随机磁盘访问和磁盘寻道速度慢的问题。Kafka支持增加分区进行横向扩展。它将主题日志分成几百个(可能有数千个)分区分布到数千个服务器。这种方式可以让Kafka承载海量负载。 -
支持多语言
客户端和服务器之间的Kafka通信使用基于TCP的线路协议,该协议是版本化和文档化的。Kafka承诺保持对老客户端的向后兼容性,并支持多种语言,包括C#,Java,C,Python,Ruby等多种语言。Kafka生态系统还提供REST代理,可通过HTTP和JSON轻松集成。Kafka还通过Kafka的融合模式注册(ConfluentSchema Registry)支持Avro模式。Avro和模式注册允许客户以多种编程语言制作和读取复杂的记录,并允许记录的变化。 -
应用广泛
Kafka支持构建实时流数据管道,支持内存微服务(比如actors,Akka,Baratine.io&