今天就跟大家聊聊有关Kafka数据中转传输的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
需求起源
由于某些海外节点的数据发送到Kafka的上海集群会产生较高的延迟,因为公网访问的时候数据可能会进行多次中转,而导致网络延迟较高。所以增加了一个地区中转,该地区的网络情况到所有的节点的网络情况较好(厂商推荐)。
所以想把数据通过该地区做一次中转,再发送到上海。这样来看整体时延约120ms+。所以在Kafka的producer直接把host配置为该中转节点。经过测试,发现数据能够到上海。
设想的数据流程
出现异常,延迟依然很高
通过几天的观察,发现峰值时刻的异常依然很高,而当时地区节点之间的网络情况还不错。其他地区到中转地区节点的时延约90ms+,中转地区到上海节点的时延约30ms+。修改了ping数据包的大小,数量。发现丢包率,时延等一切都很正常。Kafka数据依然延迟。
网络原因基本排除。那么就是其他的原因。
Kafka压力测试
后来在某地区节点购买了一台服务器,使用 kafka-producer-perf-test进行压力测试,直接出现大量的timeout。网络情况非常不好。
但是ping的结果还好啊...
查看程序日志
查看进程发送的日志,从日志上发现一个问题。由于我使用了Nginx进行转发,所以我数据发送到Nginx的端口修改成了9000,也就是producer配置的是Nginx的host:9000,但是我发现我日志上出现的依然是发送至kafka的端口:9092。
进程没有重启?应该所有人的第一反应就是这个,所以重启进行咯...
重启进程,盯日志...
发现请求发送到Nginx的9000端口..这次应该是对了...
紧接着出来建立链接 kafka1:9092,kafka2:9092,kafka3:9092
一脸懵逼,重启依然是这样...盯了一下Nginx服务器的网络,最近几天的带宽太低了...
查找原因
基于以上问题,基本可以判断。producer发送的数据绝对没有通过Nginx。查询相关文档发现。
Kafka无法把数据通过Nginx代理方式进行传输,而通过Nginx的只有首次连接。producer节点通过Nginx获取到kafka的Metadata信息。然后通过Metadata里面的IP进行访问...
也就是说实际通过Nginx的方式是这样的,首次发送只是通过Nginx获取到Metadata的信息,Metadata包含kafka的broker各ip地址。然后producer则会直接把数据发送到kafka集群。看完上述内容,你们对Kafka数据中转传输的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程之家行业资讯频道,感谢大家的支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。