kafka学习笔记-01
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息队列,一般用作系统间解耦、异步通信、缓冲流量削峰填谷,同时提供了简单的流处理功能.
1.什么叫系统间解耦、异步通信、缓冲流量削峰填谷
系统间解耦/异步通信。
示例1:我们用一个用户注册的场景来举例
如图:用户注册共分2步
- 用户注册,数据库保存用户信息
- 调用短信服务发送短信,返回给用户提示
假设每一步都需要30毫秒完成,那么用户注册,到请求撤离就需要60毫秒。
但实际工作中,我们不会将用户注册的功能和短信发送功能用串联的方式去执行。而是采用异步发送的方式。
异步发送 如图:
我们在用户注册和发送短信中间加上了一个消息队列(kafka)
用户注册成功之后向消息队列写入消息,就立刻返回返回给用户。
这样做就减少了用户在系统的连接时间。
再由短信服务主动消费消息队列(kafka)的消息,给用户发信息。
这就实现了我们需要的异步通信
并且这种方式不仅实现了异步通信,还能实现系统间解耦。
在发送短信时短信服务出现了故障。如果还是最开始的串联方式执行。短信服务的故障将会直接导致注册功能不可用。而增加消息队列之后,短信服务故障我们可以解决完问题后,继续发送注册成功的信息给用户。也就达到了系统间解耦的目的
如图:
缓冲流量削峰填谷
什么叫缓冲流量削峰填谷?
举个例子:
前台发起的请求数量是10000/s。
但是由于业务复杂后台每秒处理请求的能力是2000/s,这个时候如果前台不做限流,控制请求的数量。就会导致后台系统被压垮,引发系统宕机。
如图:
这种情况下就能使用kafka,将数据都存入kafka中,业务处理就能有条不紊的进行。
避免了瞬时数据过大对系统造成的影响,也就达到了缓冲流量,削峰填谷的目的
如图:
下面是一些概念:
-
Kafka作为一个集群,运行在一台(单机环境)或者多台服务器(集群)上.
-
Kafka 使用 ZooKeeper 如果你还没有ZooKeeper服务器,你需要先启动一个ZooKeeper服务器。
-
Kafka 通过 topic 对存储的流数据进行分类。
-
每条记录中包含一个key,一个value 和一个timestamp(时间戳)。
-
Kafka有四个核心的API
生产者API(The Producer API)
允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
消费者(The Consumer API)
允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。
流处理(The Streams API)
允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
The Connector API
允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。