Kafka简介
消息队列
消息队列是存储消息的队列,就是将要传输的数据存放在队列中
程序员可以将消息存入消息队列中,也可也从消息队列中获取信息
很多时候消息队列不是一个永久性的存储,是作为临时存储存在的
消息队列中间件是用来存储信息的组件,例如Kafka
应用场景
- 异步处理
- 系统解耦:例如:订单系统下单,需要取减少库存,此时可以将订单系统的订单存入消息队列中,库存系统接收到消息,来处理,实现解耦合
- 流量削峰:在高并发场景中,将用户请求存入消息队列,让其进行排队等待,后面系统慢慢处理,低延迟,高可靠,高吞吐
- 日志处理
消息队列的俩种模式
点对点模式
消息发送者生产消息发送到消息队列中,然后消息接收者从消息队列中取出并且消费消息。消息被消费后,消息队列中不再有存储,所以消息接收者不可能消费到已经被消费的消息
特点:
- 每个消息只有一个接收者(即一旦被消费,消息就不再在消息队列中)
- 发送者和接收者之间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息
- 接收者在成功接收消息之后需要向队列应答成功,以便消息队列删除当前接收的消息
发布订阅模式
多个消费者可以消费同一个消息
特点:
- 每个消息可以有多个订阅者
- 发布者和订阅者之间有时间上的依赖,针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息
- 为了消费消息,订阅者需要提前订阅该角色的主题,并保持在线运行
Kafka概述
Kafka是一个分布式的发布-订阅消息系统,可以快速的处理高吞吐量的数据流,并将数据实时的分发到多个消费者中。Kafka消息系统由多个broke(服务器)组成,这些broker可以在多个数据中心之间分布式部署,以提供高的可用性和容错性
特点:
- 数据吞吐量大,需要能够快速收集各个渠道的海量日志
- 集群容错性高:允许集群中少量节点奔溃
- 功能不需要太复杂:Kafka的设计目标是高吞吐量,低延迟和可扩展,主要关注消息传递而不是消息处理
- 允许少量数据丢失:在海量应用日志,少量的日志丢失是不影响服务的系统的
快速上手Kafka
基础操作
创建一个topic主题(消息都是存放在topic中,类似于MySQL的建表过程)
基于Kafka的内置测试生产者脚本来读取标准输入(键盘输入)的数据,并存放在topic中
基于Kafka的内置测试消费者脚本来消费topic中的数据
基准测试
基准测试是一种测量和评估软件性能指标的活动。我们可以通过基准测试了解到软件,硬件的性能水平,主要测试负载的执行时间,传输速度,吞吐量,资源占用率等
基于1个分区1个副本的基准测试
测试步骤:
- 启动Kafka集群
- 创建1个分区1个副本的topic,test1
- 同时运行生产者,消费者基准测试程序
- 观察结果