一.背景
一个实时业务,数据流 app -> nginx ->lua ->kafka -> spark streaming ->kudu ->zepplin 。
打开zepplin,实时数据出不来。看不到。
二.问题分析-结合链路
1.近期流量暴涨,单个用户的使用时长,由1-1.5h 增加到 8-10h。
2.大量数据进入kakfa,得不到spark streaming及时处理,kafka有大量消息堆积。
3.streaming 任务,duration时间变长。
4.spark 的executor (执行算子) 写入kudu 延时变长。
5.kudu 中 几乎快到了,拒绝写入数据(client写kudu 写入失败)的状态。
6.zepplin读kudu数据失败,延时特别长,导致打开zepplin看不到数据
三.问题分析-kudu数据库
1.问题聚焦到kudu数据库上,从数据库原理,特别是kudu处理请求的入手
[root@realtime-1 ~]# ps aux | grep 145440
root 68916 0.0 0.0 112708 964 pts/11 S+ 11:09 0:00 grep --color=auto 145440
kudu 145440 202 37.2 34052208 24452396 ? Sl Feb28 52555:59 /usr/lib/kudu/sbin/kudu-tserver --server_dump_info_path=/var/run/kudu/kudu-tserver-kudu.json --flagfile=/etc/kudu/conf/tserver.gflagfile
2.kudu用LSM 索引文件,组织数据,存储。写入过程先写内存,再刷磁盘。data+log 形式。WAL。
3.kudu 先把数据写内存(脏数据),再写log(WAL)。随着内存中脏数据不断增加,kudu有一套机制会刷脏数据。
4.大量数据,写入kudu,kudu处理不及时,造