-
Notifications
You must be signed in to change notification settings - Fork 24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Kafka 解难:到底你们是谁在写我呢? #219
Labels
Comments
netstat 怎么查不到对应的连接了呢从 192.1.8.14 上看有很多来自于 192.1.8.11 的连接连到本机的 9092 Kafka 端口上 [beta19 ~]# hostname -I
192.1.8.14 172.17.0.1 10.42.0.0
[beta19 ~]# netstat -atnp | awk 'NR <= 2 || /9092/ && /108.11/' | awk '{if (NR <= 2) { print $0 } else {print NR-2,$0}}'
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
1 tcp 0 0 192.1.8.14:9092 192.1.8.11:37594 ESTABLISHED 21239/java
2 tcp 0 0 192.1.8.14:9092 192.1.8.11:60318 ESTABLISHED 21239/java
3 tcp 0 0 192.1.8.14:9092 192.1.8.11:47051 ESTABLISHED 21239/java
4 tcp 0 0 192.1.8.14:9092 192.1.8.11:23547 ESTABLISHED 21239/java
5 tcp 0 0 192.1.8.14:9092 192.1.8.11:41188 ESTABLISHED 21239/java
6 tcp 0 0 192.1.8.14:9092 192.1.8.11:22280 ESTABLISHED 21239/java
7 tcp 0 0 192.1.8.14:9092 192.1.8.11:38398 ESTABLISHED 21239/java
8 tcp 0 0 192.1.8.14:9092 192.1.8.11:23467 ESTABLISHED 21239/java
9 tcp 0 0 192.1.8.14:9092 192.1.8.11:47125 ESTABLISHED 21239/java
10 tcp 0 0 192.1.8.14:9092 192.1.8.11:41180 ESTABLISHED 21239/java
11 tcp 0 0 192.1.8.14:9092 192.1.8.11:41292 ESTABLISHED 21239/java
12 tcp 0 0 192.1.8.14:9092 192.1.8.11:5478 ESTABLISHED 21239/java
13 tcp 0 0 192.1.8.14:9092 192.1.8.11:54091 ESTABLISHED 21239/java 从 192.1.8.11 上看于是登录到 192.1.8.11 上使用同样的 netstat 命令,却找不到对应的连接,使用 [beta11 ~]# hostname -I
192.1.8.11 172.17.0.1 10.42.1.0
[beta11 ~]# netstat -atnp | grep 192.1.8.11:22280
[beta11 ~]# cat /proc/net/nf_conntrack | grep 22280
ipv4 2 tcp 6 86365 ESTABLISHED src=10.42.1.211 dst=192.1.8.14 sport=39856 dport=9092 src=192.1.8.14 dst=192.1.8.11 sport=9092 dport=22280 [ASSURED] mark=0 zone=0 use=2 [beta17 ~]# kubectl get pod -A -o wide | awk 'NR <=1 || /10.42.1.211/'
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cloudsign timetaskcloudsign-74c59b777-xhkgs 1/1 Running 0 71d 10.42.1.211 192.1.8.11<none> <none> 文章 连接跟踪(conntrack):原理、应用及 Linux 内核实现 提到
看来 k8s 的这个网络方案就实现了这样一套独立的连接跟踪和 NAT 机制。所以 netstat 命令是看不到的。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Kafka 解难:到底你们是谁在写我呢?
缘起
Kafka 里积攒了几百万的消息等待着消费,运维同学很急慌,看着上百个连接着 Kafka 的连接,想方便找出来,哪些连接是生产者(写入者),其中又有哪些是忙碌的,以及在哪些主题上忙碌。
思索
“天灵灵,地灵灵,太上老君快显灵”。发动脑筋,马上想出几种方案:
当当当,几种方案,都不好使。
干活
对了,想到之前曾经做过的 HTTP 旁路流量复制,能不能在 Kafka 上整一个呢,如果能方便解析出 Kafka 的 生产者消息包格式,那就很方便干活了。这个思路是通的。马上“百度”一下,很容易,找到了一个开源的 kafka-sniffer 项目,那就顺手拈来吧,稍在改造一下吧, Golang干这活还是太方便了,一会就搞定,效果如下
https://github.com/bingoohuang/kafka-sniffer
再顺便造一个统计 API:
齐活
好了,可以比较方便地找出谁在写我,用什么主题写我,累计写了多少次,写了多少量了。
看帖的同学,你们还有没有更好的方案呢,敬请放马过来,比这个方案好的,我要请客吃饭咯。
补充:
上面提到的第4种使用 IPTables 方案,https://github.com/JackOfMostTrades/tls-tproxy 使用此技术的示意图如下:
The text was updated successfully, but these errors were encountered: