侧边栏壁纸
  • 累计撰写 23 篇文章
  • 累计创建 12 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Kafka测试策略有什么

usoo
2022-06-20 / 0 评论 / 0 点赞 / 93 阅读 / 0 字

背景

在我们团队的项目中,某些HTTP协议接口出现了高并发受阻的问题,由于比较棘手,所以我们将整个项目解耦重构成Kafka消息传递的过程,实现了更高并发的消息处理能力。可见Kafka有效解决了当时的痛点问题。下面我们来聊聊测试人员需要关注Kafka什么细节。

什么是Kafka

Kafka是一个分布式流处理平台,可以处理实时数据流,高效地进行消息传递,包括消息发布和订阅。下面有几个常见概念。

  • 生产者(Producer):负责将消息发送到kafka中
  • 消费者(Consumer):负责从kafka中拉取消息进行消费
  • 主题(Topic):消息的类别
  • Broker:Kafka的实例,负责存储和处理消息

消息传递流程:生产者发布一个消息到Kafka的一个Topic ,该Topic的消息存放于的Broker中,消费者订阅这个Topic,然后从Broker中消费消息。

a9f1921060133ea7d5114ed1fa170f6

Kafka的作用

  • 高吞吐量,低延迟。 Kafka 能够高效地处理大规模的消息流,每秒可以处理几十万条消息,而且消息从生产者(Producer)发送到消费者(Consumer)的延迟时间非常低。
  • 持久性。Kafka中会把消息持久化到本地磁盘中。例如微信的聊天记录就是保存在本地,并支持备份恢复。
  • 有序性。Kafka消息包通常来说都是一次性的,并按照发送的顺序存储和传递。例如金融交易流水、订单处理流程等。
  • 解耦、支持微服务。Kafka 作为中间件,可以有效地解耦各个系统组件,这样组件之间不会直接相互依赖。同时也适合作为微服务之间的消息总线,实现轻量级通信。

Kafka落地场景

  • 日志采集。可以解决大量日志传输的问题。日志采集客户端负责日志数据采集,定时写受写入Kafka队列。Kafka负责日志的收集存储和转发。日志处理应用则订阅并消费kafka队列中的日志数据 。

    alt 1cb12fb991ab06da532f3b9d9b355b78

  • 应用解耦。例如淘宝用户下单后,订单系统会直接调用库存系统的接口。但如果库存系统出问题了,订单也会生成失败。如果引入了Kafka,那么订单系统作为生产者,将订单信息写入Kafka,直接返回下单成功。而库存系统作为消费者,则从Kafka订阅获取订单消息。这样即使库存系统出问题,订单系统也不会受影响。

  • OA离线消息传递。例如用户A使用OA客户端和离线的用户B聊天发消息,用户A在线发送了几条消息,会先传递到Kafka存储,此时会触发其他服务接口来通知用户B有未读消息,用户B打开与A的聊天框,未读消息便会从Kafka一次性全部拉取,实现了离线消息的传递。

Kafka测试策略

我们测试需要做的就是模拟producer到broker,broker到consumer之间的各种故障,模拟场景都是基于业务接口实现的,再验证数据是否完整,有没有数据丢失或者重复。

  • 测试对象:被测服务和Kafka的交互场景。
  • 测试核心:基于业务场景提供的接口校验消息传递的正确性。
  • 测试关注点:
    1. 生产者消息的校验。由于Kafka消息传递是一次性的,无法随时查看Kafka中间件的数据,那么生产者发布后的消息需要通过消费者的对外表现校验,也就是基于业务接口校验数据正确性。
    2. 消费者消息的校验。同样是基于接口校验对外表现结果,确保消息的完整性。
    3. 不同Topic的校验。确保生成者和消费者的topic对齐,不然可能出现生产者发布到topicA,而消费者去订阅topicB,导致消息无法收发。
    4. 消息积压的处理。在某些高并发场景,例如用户量突然剧增,消息的消费速度跟不上消息的生成速度,就会出现消息积压。

    解决方案如下:
    1)优化消息者逻辑,修改配置,修改业务逻辑等。
    2)增加消费者,扩容消费者的实例。
    3)控制生成者的消息发布速度。

0

评论区