问题反馈: xx现场测试环境下,整个平台的数据,除了原始数据模块,其他模块正常运行。相同版本的包,在线上环境上原始数据的订阅是正常的,但是测试环境没有,查看所有相关的日志,均没有报异常,且日志中有正常显示已经把数据发送到kafka。但是从kafka的日志里查,没有收到转发过来的数据。
 
这里梳理一下这个 原始数据 的整个流程:
upload 转发 原始数据到 kafka,用的topic为 OREGINAL_DATA ,   storm计算启动一个叫realtime的拓扑,消费 OREGINAL_DATA 上的数据,再把处理后的数据转发到 kafka, 用的topic为  OREGINAL_DATA_FORWARD。
 
排查过程:
1. 查看 upload日志,确定日志中有正常发数据到kafka ,且显示成功了   -- 这个日志有一个很大的误导作用
2. 通过 kafka 的消息积压命令查看(如下),确定是没有新的信息生产(logSize没有变化,通过kafka的 log.dirs 也确定该topic没有 生产到数据)
        kafka-consumer-offset-checker.sh   --topic OREGINAL_DATA --zookeeper zkIP:2181 --group GROUP_OREGINAL_DATA
3. 通过第2步的排除,怀疑 upload机器与kafka集群不通,用ping命令,确定机器是通的,查看 iptables ,没有信息, 用telnet   kafkaIP   9092 ,不通,提供没有路由(no route to host),怀疑是hosts文件配置问题,确认有正常配置。 把 kafka上的防火墙关了,telnet 通了(这里还要恶补一下防火墙的知识,另外,这个是测试环境,所以可以直接关)。
4. 发数据,重复2,问题还是没有解决。通过修改程序中 topic为 OREGINAL_DATA_NEW 确定 程序是否与 kafka集群通。发现topic有正常创建,但是就是没有消息生产出来。
5. 在upload机器上安装 kafka,通过运行kafka自带的producer 行(命令如下),给新建的topic发数据,发现有报错:
        kafka-console-producer.sh --broker-list kafkaIP:9092 --topic  OREGINAL_DATA_NEW
    报错信息为: org.apache.kafka.common.errors.TimeoutException,通过网上搜索,定位原因是发布到zookeeper的advertised.host.name如果没有设置,默认取java.net.InetAddress.getCanonicalHostName().值,被用于生产端和消费端。因此外部网络或者未配置hostname映射的机器访问kafka集群时就会有网络问题了。
 
6. 配置 kafka 集群的主机名到 upload 机器的hosts 文件中, 发数据,问题解决。
 
这里注明一下,upload表本来是有配置 kafka集群的,但是用的是别名,且 公共配置文件上相关集群机器的配置信息也是用的别名,当时测试用的命令,也是别名。
 
 
关于测试这边的疏漏问题总结:
以前测试都是直接在公共配置文件用的主机名测试(这里用的主机别名的方式还没遇到过),另外,在kafka集群不通的情况下,upload日志居然没有报一点异常,还显示成功,这里对于 异常 情况的测试用例设置有些欠缺,后期要专门整理对程序的异常处理情况做测试,来验证程序的健壮性及自我恢复能力。
一: 通过控制防火墙来模拟网络异常的情况
    1.  在环境正常情况下,把 防火墙打开,确定程序是否正常,日志有没有对应的异常信息协助定位问题
    2.  关闭防火墙,确定程序能否自恢复,日志是否正常
二:要把各种基础服务分开部署,这个涉及到机器的申请,不然测试环境所有服务都部署在一台机器 或者几台机器上,所有网络都是通的,完全无法模拟这种测试环境
 

最新文章

  1. mvc 中的 [ChildActionOnly] 和 [NonAction]
  2. Python3 配置文件 解析
  3. 【BZOJ】【3143】【HNOI2013】游走
  4. 【线性结构上的动态规划】UVa 11584 - Partitioning by Palindromes
  5. Hashtable 和 HashMap 的比较
  6. Atom编辑器入门到精通(一) 安装及使用基础
  7. Funsion Charts 学习(二)
  8. UIStepper UISlider UISwitch UITextField 基本控件
  9. 团队作业4——第一次项目冲刺 SeCOnd DaY
  10. PolarDB · 新品介绍 · 深入了解阿里云新一代产品 PolarDB
  11. Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
  12. CRMEB系统开发文档
  13. MySQL 基本语句(2)
  14. Discuz!X 3.4 前台任意文件删除漏洞复现
  15. JDBC(4)—Preparedstatement
  16. SRS流媒体服务器安装配置
  17. [linux] ssh远程执行本地脚本
  18. 黑马Python——学习之前
  19. SQL语言 之 SQL概述
  20. Python中的strip()的理解

热门文章

  1. h5嵌套iframe实时传参(适用vue)
  2. requests模块发送数据
  3. Windows下解决系统端口被VM虚拟机占用问题
  4. c语言之一个简单的《学生教师管理系统》小结记录(二)
  5. RT-Thread代码启动过程与$Sub$ $main、$Super$ $main
  6. linux入门常用指令1.配置本地yum源
  7. Vue介绍:vue导读2
  8. Linux date cal bc和一些快捷键学习
  9. PAT乙级1043
  10. 218多校第九场 HDU 6424 (数学)