由于当前海外的数据节点较多,同时也较为分散,原本海外数据直接通过公网写入到Kafka集群中。但是由于海外网络进行公网传递的问题,存在非常大的延迟。导致某些业务直接无法使用。例如异常告警等。
海外数据延迟问题
我们海外的节点很多,但是又非常的分散。可能某个国家仅仅有几台机器,为了实现日志分析的业务需要把海外的数据传输回国内的数据中心上来。当前的选型是通过Kafka进行传输。直接通过公网的方式把数据写入到Kafka,国内的数据中心节点对Kafka的数据进行消费。
国内的公网传输的延迟也还可以,因为我们本身对于数据的延迟性要求也不是太高。可能某些告警类的业务需要考虑延迟性。
随着告警业务的增多,对于海外数据的延迟性有了一些要求,但是在实际使用中发现,海外数据的延迟问题非常大。
这里是ping的当时的状态。可以看到丢包与时延都很高,同时又进行了traceroute的跟踪,发现某些数据的写入绕着地球转了半圈再回到国内(好想做一个数据包一秒钟环游世界)
不同的地区的延时不一样,最严重的地区丢包非常的高,时延也非常的高。
解决方案
咨询了相关的厂商,给予了三个解决方案。专线、海外计算结果后传输结果、中转节点。分析到最后,最终选择了中转节点的方案。
我们选择了一个网络情况较好的某个地区进行网络测试,就是从其他的各个节点中传输数据到该地区的服务器,查看网络状况,最终测试结果网络最差的地区仍然有200ms的时延,但是丢包情况已经基本不存在。而通过该中转节点到Kafka节点的时延在30ms左右。
ok,那么现在就在该节点搭建了一台服务器进行日志数据的传输。
搭建nginx进行数据中转
由于Kakfa使用的TCP协议,nginx的搭建也比较简单,直接把接收到的相关的数据直接透传到Kafka节点即可,配置如下
stream {
upstream proxy_port {
hash $remote_addr consistent;
server kafka_1:9092;
server kafka_1:9092;
server kafka_1:9092;
}
server {
listen 9000;
proxy_connect_timeout 20s;
proxy_timeout 5m;
proxy_pass proxy_port;
}
}
配置完成后,producer节点修改为写入到nginx的 9000端口,数据即可完成发送。
跨境数据的传输需要进行相关合法性审查