背景及系统简介:

  Kafka是一种高吞吐量的分布式架构的发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。通常由于高吞吐量的要求而选择通过处理日志数据和日志聚合来解决。

  本文涉及的分布式系统(简称C系统)已初具规模,而随着系统建设的建设推进和功能的逐步完善,外围系统对C系统的日志消费需求逐步增加。为了满足日志消费需求,决定在C系统的网关系统中增加日志发送功能实现对外消息的发送。

  C系统的网关系统主要负责分布式系统的接入验证,对接受请求进行必要的合法性、安全性等内容的校验。将消息发送功能放到网关系统中主要有2方面考虑:

  1.网关系统日志记录了上送请求的原始信息,能够完整描述交易请求发生的场景及请求内容;

  2.便于制定统一的消息报文格式和规范,避免多系统发送消息时标准不一致,给后续的消息消费带来困难。

联机消息发送测试

  网关系统设置了消息控制表,控制是否发送消息。同时可以根据需要从不同维度控制哪些消息需要发送,而不是所有日志数据全部发送,避免系统资源的浪费,提高消息的使用效率。

  1、正常交易消息发送

  即发送服务的基本功能测试。当上送交易请求在后台执行成功后,触发网关系统消息发送功能,将该上送请求相关的日志信息封装消息发送出去。消息控制数据缓存在应用服务器,以提高读取速度,通过POSTMAN工具查询、验证。

  消息发送无显性展示,因此测试对消息是否正常、发送规则是否符合消息控制表配置规则、发送内容的正确性和完整性、topic使用是否正确、总线系统是否正常、正确接收到消息等内容的验证,通过查询log的方式完成。

 2、查证交易消息发送

  查证功能是网关系统提供的查证上送交易执行结果(成功/失败)的功能。由于网络等原因未收到被查交易返回结果时,如果该交易配置了消息发送功能,则在查证交易成功后将被查交易的原始交易信息封装消息并发送,保证该交易所有使用场景都能正确发送消息。

 3、异常消息处理

  异常场景主要验证Kafka不能正常发送消息的情况,我们通过修改Kafka服务器IP地址方式和配置错误的topic等方式模拟Kafka消息发送失败的场景,进而验证网关系统是否能将消息正确、完整的记录到异常消息表中。

4、熔断场景测试

  熔断是指Kafka异常或消息服务压力过大,进而影响网关系统其他正常功能,需要临时关闭消息服务已保证网关系统本身对外服务正常。关闭消息服务是通过将要发送的消息记录到异常消息表中,后续通过批量补发方式补发消息。

批量消息处理测试

  通过定时轮询的方式,对记录到异常消息表里的消息进行补发。同时设置消息熔断机制,当Kafka异常时,将消息发送完全切换到记录消息表,避免造成Kafka完全失效的同时也保证了本系统对外服务正常。

消息补发功能

当日消息补发定时轮询,每5分钟扫描一次异常消息表,对于未发送成功的消息重新补发,在发送三次失败后更新消息状态为“异常”。测试主要验证内容:

1)补发消息的筛选;

2)错误的消息(如空消息)等处理;

3)补发线程冲突处理机制,等

上日消息补发

对上一日未发送的异常消息进行补发,与当日补发功能类似,但不是定时轮询。

异常消息导出

  对于各种补发后仍失败的消息,为保证数据的完整性,提供导出功能做后续处理。

性能测试

  由于投产后预期消息发送量很大,预估约1亿笔以上,所以对性能要求较高。

  参考预估交易量,根据二八原则(80%的交易量发生在20%的时间内),估算投产后系统的TPS约7000左右。参考该系统前次性能测试指标,我们将通过标准定位2000,测试、生产TPS比例1:3.5。而测试环境资源与生产资源比例约为1:16,远大于TPS的测试生产比例,因此我们认为达到该标准即可满足生产系统性能要求。

  在进行了基准测试、负载测试及混合场景测试后,消息服务在测试环境TPS达到了2000以上,并且系统资源都在合理范围内。

总结

  Kafka是比较成熟的消息系统,为网关系统的消息服务提供了基础,但Kafka偶尔会出现假死现象,导致消息阻塞。本次原本计划尝试模拟假死现象,但与项目开发人员以及Kafka支持人员讨论了解到,暂时无法模拟该场景,这也是本次留下的遗憾。

kafka消费并导出_如何使用Docker内的Kafka服务?消息服务测试实践篇相关推荐

  1. 单机 搭建kafka集群 本地_单机快速搭建多节点kafka集群

    有时候为了更好地了解kafka集群的运行机制,需要自己搭建kafka集群.本文的目的就是让大家在单机上快速搭建kafka集群(仅作为单机测试使用). 环境及工具版本 mac OS 10.15.5 ka ...

  2. flume+kafka消费数据【纯个人笔记】

    1.数据生产 使用java代码往一个文件中写入数据 package com.mobile;import java.io.*; import java.text.DecimalFormat; impor ...

  3. mac系统下使用flink消费docker运行的kafka

    版本 flink 1.12.0 scala 2.11 java 1.8 kafka 2.0.2 首先使用maven创建一个新的工程 mvn archetype:generate -Darchetype ...

  4. kafka消费的三种模式_快速认识Kafka

    1.Kafka是什么 简单的说,Kafka是由Linkedin开发的一个分布式的消息队列系统(Message Queue).kafka的架构师jay kreps非常喜欢franz kafka,觉得ka ...

  5. kafka消息消费有延迟_消息中间件选型分析---从Kafka与RabbitMQ的对比来看全局

    有很多网友留言:公司要做消息中间件选型,该如何选?你觉得哪个比较好?消息选型的确是一个大论题,实则说来话长的事情又如何长话短说.对此笔者专门撰稿一篇内功心法:如何看待消息中间件的选型,不过这篇只表其意 ...

  6. kafka消息消费有延迟_注意了!Kafka与RabbitMQ千万不要乱用…

    作为一个有丰富经验的微服务系统架构师,经常有人问我,应该选择 RabbitMQ 还是 Kafka? 图片来自 Pexels 基于某些原因, 许多开发者会把这两种技术当做等价的来看待.的确,在一些案例场 ...

  7. kafka消息消费有延迟_简易实现kafka延迟消息

    背景 当前业务存在以下场景:在一个事务内的最后一步是发送kafka消息,消费端收到通知后读取数据并做处理.但是由于kafka几乎是即时收到消息,导致偶尔出现"在发完kafka和提交事务的间隙 ...

  8. kafka mysql秒杀框架_一次模拟简单秒杀场景的实践 Docker Node.js Kafka Redis MySQL...

    秒杀活动可以说在互联网上随处可见,从12306抢票,到聚划算抢购,我们生活的方方面面都可以看到秒杀的身影.秒杀的架构设计也是对于一个架构师架构设计能力的一次考验.本文的目的并不在于提供一个可以直接落地 ...

  9. kafka 消费端 api_在消费者的眼中:您真的需要为您的API提供客户端库吗?

    kafka 消费端 api RESTful Web服务和API的优点在于,任何使用HTTP协议的使用者都可以理解和使用它. 但是,同样的难题一遍又一遍地弹出:您是否应该将Web APis与客户端库一起 ...

最新文章

  1. elasticsearch 客户端工具_1分钟系列-Elasticsearch 简介与单机版安装
  2. Rabbit的Windows安装
  3. 小米线刷包需要解压么_【连载】刷机教程之小米手机通用线刷教程
  4. 字节码技术在模块依赖分析中的应用
  5. Android 控件
  6. 对眼睛有利的屏幕颜色
  7. 论ARMv7 Thumb-2指令集的性能(含Thumb指令集介绍)【转载】
  8. 十七、Oracle学习笔记:视图操作和表复制
  9. Postman中的Pre-request Scrip详解
  10. 统计计量丨统计学公开课大盘点(附下载)
  11. android电视投屏 源码,【精品工具】简单、流畅、易用的安卓android投屏软件
  12. 爆炒猪肚的做法 爆炒猪肚怎样炒才脆
  13. 顺势腹式呼吸还是逆势
  14. 蓝桥杯算法训练-隐匿的刺客
  15. js重新加载iframe框架
  16. thymeleaf引用图片_thymeleaf显示图片(转)
  17. OpenGL矩阵运算——GLM库的使用
  18. 如何在word中粘贴美观工整的代码段(planetB/notepad++)
  19. 移动端vue+vant+高德地图实现拖拽选址,周边选址,搜索选址,自动定位,选择城市功能,获取地址经纬度,详细地址
  20. 数字 IC 技能拓展(22)原码、反码、补码、移码的区别与联系

热门文章

  1. SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机)【两种做法】
  2. java 反射 单列_轻松掌握Java单例模式
  3. c语言最长公共子序列_LCS(最长公共子序列)
  4. Sass学习笔记(一)
  5. 实现vue2.0响应式的基本思路
  6. 9本java程序员必读的书(附下载地址)
  7. mysql5.7 部署文档-rpm
  8. Python 各种运行错误(如:SyntaxError :invalid syntax)
  9. Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建
  10. [luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)