某银行大数据平台应用调用kafka的API往kafka里发送数据,发送端出现OOM的难点问题?

银行在建设大数据平台的过程中,不可避免地遇到各种技术难点问题。遇到难点问题时,项目组需协调各种资源解决这个问题。
我们在使用kafka(0.8.2.1)的时候,遇到一个很诡异的问题,具体如下:
应用调用kafka的API往kafka里发送数据,每隔一段时间后(大概发送百万笔报文后),发送端就会出现OOM的问题。

参与6

1同行回答

haohaopkuhaohaopku  软件架构设计师 , 某银行
银行在建设大数据平台的过程中,不可避免地遇到各种技术难点问题。遇到难点问题时,项目组需协调各种资源解决这个问题。在使用kafka(0.8.2.1)的时候,遇到一个很诡异的问题,具体如下:应用调用kafka的API往kafka里发送数据,每隔一段时间后(大概发送百万笔报文后),发送端就会出现OOM的问...显示全部

银行在建设大数据平台的过程中,不可避免地遇到各种技术难点问题。遇到难点问题时,项目组需协调各种资源解决这个问题。
在使用kafka(0.8.2.1)的时候,遇到一个很诡异的问题,具体如下:
应用调用kafka的API往kafka里发送数据,每隔一段时间后(大概发送百万笔报文后),发送端就会出现OOM的问题。
1、 我们初步分析讨论了后,得出这个问题应该与kafka集群没有太大关系,问题出在调用段上,故采用了以下三步:
a)分析发生OOM后,产生的dump文件;
b)重新审视了调用端的相关的调用代码;
c)确认调用端的系统的内核参数是否优化;

对dump文件进行分析,除了确定是那行代码造成的OOM问题,其他并没有找到太多有价值的东西。
对调用段的代码进行优化,确保不会产生线程泄露的问题。
对操作系统的内核参数进行优化,比如调优limits参数等。

2、 在进行1、步骤中的各种工作后,重新测试,问题依旧。
项目组召开了一次讨论会,大家一致倾向于是调用kafka的程序存在问题。
重新阅读了下kafka的官方手册,包括重新梳理了官方提供的demo和各种参数的配置。
对比了下出问题的调用程序,发觉JDK使用的版本不一样。
报OOM的程序的JDK使用的是JDK1.6的版本,而官方要求的最低版本是1.7。
我们重新用JDK1.7编译和打包及将调用端的系统的JDK改为1.7,重新测试,持续了2天,大概往kafka里发送了1000多万条的数据,一切正常。
我们分析了JDK1.7和JDK1.6的一个重大区别是垃圾回收机制的不同
至此,找到此次产生OOM问题的原因和解决问题的方法。
3、 总结:
虽然,问题原因查明和解决方法很简单,但是后续的善为工作比较麻烦。
1)访问kafka的应用使用的都是JDK1.6,该应用承担了很多功能,不可能贸然使用JDK1.7。因此将访问kafka的模块单独出来,形成个服务。单独部署。
2)这次OOM,使得不少同事和领导对kafka产生了怀疑。虽然解释了,但不可避免地留下了恶劣印象。
3)此次事件,促使了我们坚定了大数据组件使用规范的编写的决心。在很端的时间内,我们组织了相关同事编写了大数据组件的开发使用规范,并根据相关专家的意见进行了修改,形成了1.0版本的初稿,作为指导应用使用大数据的一个手册。

收起
金融其它 · 2019-07-22
浏览2312

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2019-07-22
  • 关注会员:2 人
  • 问题浏览:3740
  • 最近回答:2019-07-22
  • X社区推广