背景
随着现在业务量的增大,高并发的场景也是越来越多,但是在这种高并发的场景下,服务端是不及处理客户端的请求,可能会造成一致阻塞,所以我们考虑是不是应该将这些请求保存下来,然后异步慢慢消化,所以就有了消息队列。对于单个服务来说其实这样没有问题,但是现在基本都是微服务架构,所以简单的运用消息队列已经解决不了我们的需求,我们还希望能够管理这些数据,比如存储和操作,使用的过程中还需要保证高可用性等等,于是市场上就诞生了很多的消息系统平台,如:Kafka、RabbitMQ、RocketMQ等,这里我们就来说下Kafka。
一、介绍
Apache Kafka是一个分布式流处理平台
首先是一些概念:
- Kafka作为一个集群,运行在一台或者多台服务器上.
- Kafka 通过 topic 对存储的流数据进行分类。
- 每条记录中包含一个key,一个value和一个timestamp(时间戳)。
Kafka有四个核心的API:
- The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
- The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。
- The Streams API 允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
- The Connector API 允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。
Kafka的使用场景:
- 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
- 构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)
二、使用
Kafka作为消息系统:队列和发布订阅功能
-
每个topic可以扩展处理并且允许多订阅者模式
-
更严格的顺序保证:Kafka能够为一个消费者池提供顺序保证和负载平衡,是通过将topic中的partition分配给消费者组中的消费者来实现的, 以便每个分区由消费组中的一个消费者消耗。通过这样,我们能够确保消费者是该分区的唯一读者,并按顺序消费数据。 众多分区保证了多个消费者实例间的负载均衡。但请注意,消费者组中的消费者实例个数不能超过分区的数量。
Kafka作为存储系统:充当中间数据的存储系统
数据写入Kafka后被写到磁盘,并且进行备份以便容错。直到完全备份,Kafka才让生产者认为完成写入,即使写入失败Kafka也会确保继续写入
Kafka使用磁盘结构,具有很好的扩展性—50kb和50TB的数据在server上表现一致。
可以存储大量数据,并且可通过客户端控制它读取数据的位置,您可认为Kafka是一种高性能、低延迟、具备日志存储、备份和传播功能的分布式文件系统。
Kafka用做流处理:能够进行实时的流处理
简单的数据处理可以直接用生产者和消费者的API。对于复杂的数据变换,Kafka提供了Streams API。 Stream API 允许应用做一些复杂的处理,比如将流数据聚合或者join。
这一功能有助于解决以下这种应用程序所面临的问题:处理无序数据,当消费端代码变更后重新处理输入,执行有状态计算等。
Streams API建立在Kafka的核心之上:它使用Producer和Consumer API作为输入,使用Kafka进行有状态的存储, 并在流处理器实例之间使用相同的消费组机制来实现容错。
来源:CSDN
作者:hy_coming
链接:https://blog.csdn.net/hy_coming/article/details/103888011