kubernetes1.16 错误排查


一.环境说明

一.环境说明

操作系统:centos7
kubernetes:16.3
docker:18.06

主机名IP地址类型
K8S-MASTER-ETCD01192.168.1.121masters
K8S-MASTER-ETCD02192.168.1.122masters
K8S-MASTER-ETCD03192.168.1.123masters
K8S-NODE01192.168.1.124nodes
K8S-NODE01192.168.1.125nodes
vip192.168.1.180vips

问题:K8S集群的node节点为NotReady状态

在虚拟机上使用了二进制搭建K8S集群,采用了外部的etcd集群。今天发现K8S的集群node节点为NotReady状态。、
下面是排查思路

1.使用kubectl get node命令,查看集群的状态。

[root@K8S-MASTER-ETCD01 ~]# kubectl get node                                
NAME         STATUS     ROLES    AGE   VERSION
k8s-node01   NotReady   <none>   14d   v1.16.3
k8s-node02   NotReady   <none>   14d   v1.16.3

2.到node节点查看组件的状态

[root@K8S-NODE01 ~]# systemctl status kubelet kube-proxy docker
● kubelet.service - Kubernetes Kubelet
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-12-08 12:01:45 CST; 2min 4s ago
 Main PID: 60435 (kubelet)
    Tasks: 20
   Memory: 27.6M
   CGroup: /system.slice/kubelet.service
           ├─60435 /usr/bin/kubelet --logtostderr=false --v=2 --log-dir=/var/log/kubernetes --hostname-override=k8s-node01 --network-plugin=cni --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig -...
           ├─61215 du -s -B 1 /var/lib/kubelet/pods/30c04252-5196-4782-a7ac-7d8266d4a9b5/volumes/kubernetes.io~secret/kubernetes-dashboard-token-xlmz7
           └─61217 iptables -w -C KUBE-MARK-DROP -t nat -j MARK --set-xmark 0x00008000/0x00008000

Dec 08 12:01:45 K8S-NODE01 systemd[1]: Started Kubernetes Kubelet.
Dec 08 12:02:17 K8S-NODE01 kubelet[60435]: E1208 12:02:17.163598   60435 aws_credentials.go:77] while getting AWS credentials NoCredentialProviders: no valid providers in chain. Deprecated.
Dec 08 12:02:17 K8S-NODE01 kubelet[60435]: For verbose messaging see aws.Config.CredentialsChainVerboseErrors
Dec 08 12:02:17 K8S-NODE01 kubelet[60435]: E1208 12:02:17.624742   60435 kubelet.go:1302] Image garbage collection failed once. Stats initialization may not have completed yet: failed to get imageFs info: unable to find data in memory cache
Dec 08 12:02:29 K8S-NODE01 kubelet[60435]: E1208 12:02:29.387796   60435 kuberuntime_manager.go:920] PodSandboxStatus of sandbox "5cd85ae495f905ee3875cac8c1409b9fed74f76adc2a6c2be7f862cbd2ac7c1f" for pod "kubernetes-dashboard-7b5bf5d559-cjgr2_kubernetes...
Dec 08 12:02:32 K8S-NODE01 kubelet[60435]: E1208 12:02:32.239453   60435 pod_workers.go:191] Error syncing pod 30c04252-5196-4782-a7ac-7d8266d4a9b5 ("kubernetes-dashboard-7b5bf5d559-cjgr2_kubernetes-dashboard(30c04252-5196-4782-a7ac-7d8266d4a9b5)"), ski...
Dec 08 12:02:57 K8S-NODE01 kubelet[60435]: E1208 12:02:57.085578   60435 pod_workers.go:191] Error syncing pod 30c04252-5196-4782-a7ac-7d8266d4a9b5 ("kubernetes-dashboard-7b5bf5d559-cjgr2_kubernetes-dashboard(30c04252-5196-4782-a7ac-7d8266d4a9b5)"), ski...

● kube-proxy.service - Kubernetes Proxy
   Loaded: loaded (/usr/lib/systemd/system/kube-proxy.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-12-08 12:03:28 CST; 21s ago
 Main PID: 61202 (kube-proxy)
    Tasks: 5
   Memory: 11.7M
   CGroup: /system.slice/kube-proxy.service
           └─61202 /usr/bin/kube-proxy --logtostderr=false --v=2 --log-dir=/var/log/kubernetes --config=/etc/kubernetes/kube-proxy-config.yml

Dec 08 12:03:28 K8S-NODE01 systemd[1]: Started Kubernetes Proxy.

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-12-07 15:42:28 CST; 20h ago
     Docs: https://docs.docker.com
 Main PID: 962 (dockerd)
    Tasks: 132
   Memory: 94.6M
   CGroup: /system.slice/docker.service
           ├─  962 /usr/bin/dockerd
           ├─ 1506 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
           ├─ 5825 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/4acb37d427dba0682e0f4e6416249286d6ff2ffe92efd62c2eb4deb4c0013597 -address /var/run/docker/containerd/containerd.sock -conta...
           ├─29915 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/0168a892a2a861bff94e9a99dadc16de47a080b34f11d682d39af6027fef6b4d -address /var/run/docker/containerd/containerd.sock -conta...
           ├─60917 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/2f0ec3ec3dc516f8fda761ca64e497f54941c11ad539d0247fbda5411d64fce5 -address /var/run/docker/containerd/containerd.sock -conta...
           ├─60918 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/c7823e8f7d23277af19ad10418d393f371a78d328e6fd7da92733fb4b98770e4 -address /var/run/docker/containerd/containerd.sock -conta...
           ├─60931 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/1f0e456fbb88c9bca8e3128873dd95f0a782f049f7f3f8741d5273f381ab3e06 -address /var/run/docker/containerd/containerd.sock -conta...
           ├─60942 runc --root /var/run/docker/runtime-runc/moby --log /run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/1f0e456fbb88c9bca8e3128873dd95f0a782f049f7f3f8741d5273f381ab3e06/log.json --log-format json create --bundle /var/run...
           ├─60943 runc --root /var/run/docker/runtime-runc/moby --log /run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/c7823e8f7d23277af19ad10418d393f371a78d328e6fd7da92733fb4b98770e4/log.json --log-format json create --bundle /var/run...
           ├─60944 runc --root /var/run/docker/runtime-runc/moby --log /run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/2f0ec3ec3dc516f8fda761ca64e497f54941c11ad539d0247fbda5411d64fce5/log.json --log-format json create --bundle /var/run...
           ├─61154 libnetwork-setkey 2f0ec3ec3dc516f8fda761ca64e497f54941c11ad539d0247fbda5411d64fce5 c87bcfebddadfd3b85c2f7420f44e1a7800b854be62a15468c0154e6ba3dadfc
           ├─61168 libnetwork-setkey c7823e8f7d23277af19ad10418d393f371a78d328e6fd7da92733fb4b98770e4 c87bcfebddadfd3b85c2f7420f44e1a7800b854be62a15468c0154e6ba3dadfc
           ├─61186 libnetwork-setkey 1f0e456fbb88c9bca8e3128873dd95f0a782f049f7f3f8741d5273f381ab3e06 c87bcfebddadfd3b85c2f7420f44e1a7800b854be62a15468c0154e6ba3dadfc
           └─98743 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/b708a4b3316c80f3899c101897e8e5b469700bb7217dbb564141c7a93118b93c -address /var/run/docker/containerd/containerd.sock -conta...

Dec 08 00:59:38 K8S-NODE01 dockerd[962]: time="2019-12-08T00:59:37.974208059+08:00" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/5cd85ae495f905ee3875cac8c1409b9fed74f76adc2a6c2be7f862cbd2ac7c1f/shim.soc...ebug=false pid=5336
Dec 08 00:59:54 K8S-NODE01 dockerd[962]: time="2019-12-08T00:59:54.381702352+08:00" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/f01b1fa367be2d79b69679a12852a32d8e31e7a3d85cfc7b264d58713e852750/shim.soc...ebug=false pid=5387
Dec 08 01:04:14 K8S-NODE01 dockerd[962]: time="2019-12-08T01:04:13.500960370+08:00" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/d5964cf94b9664adf22f1c7ee7cb3bc3f094d1d3e4127f2e4426764062286d61/shim.soc...ebug=false pid=5489
Dec 08 01:08:19 K8S-NODE01 dockerd[962]: time="2019-12-08T01:08:19.237076634+08:00" level=info msg="shim reaped" id=d5964cf94b9664adf22f1c7ee7cb3bc3f094d1d3e4127f2e4426764062286d61
Dec 08 01:08:19 K8S-NODE01 dockerd[962]: time="2019-12-08T01:08:19.250055250+08:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Dec 08 01:08:19 K8S-NODE01 dockerd[962]: time="2019-12-08T01:08:19.256157151+08:00" level=info msg="shim reaped" id=5cd85ae495f905ee3875cac8c1409b9fed74f76adc2a6c2be7f862cbd2ac7c1f
Dec 08 01:08:19 K8S-NODE01 dockerd[962]: time="2019-12-08T01:08:19.265239522+08:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Dec 08 01:08:19 K8S-NODE01 dockerd[962]: time="2019-12-08T01:08:19.510062374+08:00" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/0b7ff71bcde85aff48895ea6e3b5399916056c6082abd6b922bb2df8575c26f9/shim.soc...ebug=false pid=5780
Dec 08 01:08:19 K8S-NODE01 dockerd[962]: time="2019-12-08T01:08:19.887756800+08:00" level=info msg="shim containerd-shim started" address="/containerd-shim/moby/4acb37d427dba0682e0f4e6416249286d6ff2ffe92efd62c2eb4deb4c0013597/shim.soc...ebug=false pid=5825
Dec 08 01:10:49 K8S-NODE01 dockerd[962]: http: multiple response.WriteHeader calls
Hint: Some lines were ellipsized, use -l to show in full.

发现node的组件一切正常

3.于是我查看master节点的apiserver日志

[root@K8S-MASTER-ETCD01 ~]# tail -f /var/log/kubernetes/kube-apiserver.INFO 
W1208 11:59:48.639776    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59120->192.168.1.123:2379: read: connection timed out". Reconnecting...
W1208 11:59:49.908524    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp 192.168.1.123:2379: i/o timeout". Reconnecting...
W1208 11:59:50.704251    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59146->192.168.1.123:2379: read: connection timed out". Reconnecting...
W1208 11:59:50.864624    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59108->192.168.1.123:2379: read: connection timed out". Reconnecting...
W1208 11:59:50.864624    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59116->192.168.1.123:2379: read: connection timed out". Reconnecting...
W1208 11:59:52.479846    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59156->192.168.1.123:2379: read: connection timed out". Reconnecting...
W1208 11:59:53.551941    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59166->192.168.1.123:2379: read: connection timed out". Reconnecting...
W1208 11:59:53.935720    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59170->192.168.1.123:2379: read: connection timed out". Reconnecting...
W1208 11:59:54.863863    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59184->192.168.1.123:2379: read: connection timed out". Reconnecting...
W1208 11:59:55.247650    6029 clientconn.go:1120] grpc: addrConn.createTransport failed to connect to {https://192.168.1.123:2379 0  <nil>}. Err :connection error: desc = "transport: authentication handshake failed: read tcp 192.168.1.121:59190->192.168.1.123:2379: read: connection timed out". Reconnecting...
^C

看到日志有异常,2379端口是etcd集群的外部访问端口,猜想可能是etcd集群出现了问题,问题可能出在192.168.1.123节点上;

4.查看etcd集群的健康状态,并检查192.168.1.123节点上的etcd服务是否正常;

## 查看etcd的服务是否正常,发现etcd集群的192.168.1.123节点io出现异常
[root@K8S-MASTER-ETCD01 ~]# systemctl status etcd
● etcd.service - Etcd Server
   Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-12-07 15:45:46 CST; 20h ago
 Main PID: 969 (etcd)
   CGroup: /system.slice/etcd.service
           └─969 /usr/bin/etcd --name=etcd-1 --data-dir=/var/lib/etcd/default.etcd --listen-peer-urls=https://192.168.1.121:2380 --listen-client-urls=https://192.168.1.121:2379,http://127.0.0.1:2379 --advertise-client-urls=https://192.168.1.121:2379 --i...

Dec 08 12:17:47 K8S-MASTER-ETCD01 etcd[969]: failed to read c48307bcc0ac155e on stream MsgApp v2 (read tcp 192.168.1.121:44842->192.168.1.123:2380: i/o timeout)
Dec 08 12:17:47 K8S-MASTER-ETCD01 etcd[969]: peer c48307bcc0ac155e became inactive (message send to peer failed)
Dec 08 12:17:54 K8S-MASTER-ETCD01 etcd[969]: lost the TCP streaming connection with peer c48307bcc0ac155e (stream Message reader)
Dec 08 12:17:56 K8S-MASTER-ETCD01 etcd[969]: rejected connection from "192.168.1.123:37518" (error "EOF", ServerName "")
Dec 08 12:17:59 K8S-MASTER-ETCD01 etcd[969]: health check for peer c48307bcc0ac155e could not connect: read tcp 192.168.1.121:44888->192.168.1.123:2380: i/o timeout (prober "ROUND_TRIPPER_RAFT_MESSAGE")
Dec 08 12:17:59 K8S-MASTER-ETCD01 etcd[969]: the clock difference against peer c48307bcc0ac155e is too high [2.750450017s > 1s] (prober "ROUND_TRIPPER_RAFT_MESSAGE")
Dec 08 12:18:04 K8S-MASTER-ETCD01 etcd[969]: health check for peer c48307bcc0ac155e could not connect: read tcp 192.168.1.121:44904->192.168.1.123:2380: i/o timeout (prober "ROUND_TRIPPER_RAFT_MESSAGE")
Dec 08 12:18:04 K8S-MASTER-ETCD01 etcd[969]: the clock difference against peer c48307bcc0ac155e is too high [2.750450017s > 1s] (prober "ROUND_TRIPPER_RAFT_MESSAGE")
Dec 08 12:18:09 K8S-MASTER-ETCD01 etcd[969]: health check for peer c48307bcc0ac155e could not connect: read tcp 192.168.1.121:45040->192.168.1.123:2380: i/o timeout (prober "ROUND_TRIPPER_RAFT_MESSAGE")
Dec 08 12:18:09 K8S-MASTER-ETCD01 etcd[969]: the clock difference against peer c48307bcc0ac155e is too high [2.750450017s > 1s] (prober "ROUND_TRIPPER_RAFT_MESSAGE")



##检查etcd集群的健康状态,发现etcd集群的192.168.1.123节点异常,已经脱离了etcd集群
[root@K8S-MASTER-ETCD01 ~]# etcdctl --ca-file=/etc/ssl/etcd/ca.pem --cert-file=/etc/ssl/etcd/server.pem --key-file=/etc/ssl/etcd/server-key.pem --endpoints=https://192.168.1.121:2379,https://192.168.1.122:2379,https://192.168.1.123:2379 cluster-health
member 140f63cd51ff8859 is healthy: got healthy result from https://192.168.1.121:2379
member b5900dafc7a3b5f9 is healthy: got healthy result from https://192.168.1.122:2379
failed to check the health of member c48307bcc0ac155e on https://192.168.1.123:2379: Get https://192.168.1.123:2379/health: net/http: TLS handshake timeout
member c48307bcc0ac155e is unreachable: [https://192.168.1.123:2379] are all unreachable
cluster is healthy


## 在192.168.1.123节点查看etcd的服务是否正常启动
[root@K8S-MASTER-ETCD03 ~]# systemctl status etcd 
● etcd.service - Etcd Server
   Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-12-08 12:20:26 CST; 5min ago
 Main PID: 100126 (etcd)
    Tasks: 9
   Memory: 63.6M
   CGroup: /system.slice/etcd.service
           └─100126 /usr/bin/etcd --name=etcd-3 --data-dir=/var/lib/etcd/default.etcd --listen-peer-urls=https://192.168.1.123:2380 --listen-client-urls=https://192.168.1.123:2379,http://127.0.0.1:2379 --advertise-client-urls=https://192.168.1.123:2379 ...

Dec 08 12:22:51 K8S-MASTER-ETCD03 etcd[100126]: read-only range request "key:\"/registry/services/endpoints/kube-system/kube-controller-manager\" " with result "error:context canceled" took too long (14.463437434s) to execute
Dec 08 12:22:51 K8S-MASTER-ETCD03 etcd[100126]: rejected connection from "192.168.1.122:40716" (error "EOF", ServerName "")
Dec 08 12:22:51 K8S-MASTER-ETCD03 etcd[100126]: read-only range request "key:\"/registry/services/endpoints/kube-system/kube-scheduler\" " with result "error:context canceled" took too long (12.831724913s) to execute
Dec 08 12:24:20 K8S-MASTER-ETCD03 etcd[100126]: rejected connection from "192.168.1.122:40574" (error "EOF", ServerName "")
Dec 08 12:24:20 K8S-MASTER-ETCD03 etcd[100126]: health check for peer b5900dafc7a3b5f9 could not connect: EOF (prober "ROUND_TRIPPER_RAFT_MESSAGE")
Dec 08 12:24:20 K8S-MASTER-ETCD03 etcd[100126]: rejected connection from "192.168.1.121:45744" (error "EOF", ServerName "")
Dec 08 12:24:20 K8S-MASTER-ETCD03 etcd[100126]: rejected connection from "192.168.1.122:40582" (error "EOF", ServerName "")
Dec 08 12:24:20 K8S-MASTER-ETCD03 etcd[100126]: rejected connection from "192.168.1.122:40580" (error "EOF", ServerName "")
**Dec 08 12:24:20 K8S-MASTER-ETCD03 etcd[100126]: failed to heartbeat 140f63cd51ff8859 on stream MsgApp v2 (write tcp 192.168.1.123:2380->192.168.1.121:45734: write: broken pipe)**
Dec 08 12:25:25 K8S-MASTER-ETCD03 etcd[100126]: read-only range request "key:\"/registry/clusterrolebindings\" range_end:\"/registry/clusterrolebindingt\" count_only:true " with result "error:context canceled" took too long (41.922436613s) to execute
虽然这里的etcd服务是running状态的,但是日志中显示,心跳检查为failed

5.问题猜测,并尝试解决

我猜测可能是192.168.1.123节点负载过高了,由于机器的配置限制,我曾经将192.168.1.123作为K8S集群node节点加入到K8S集群中,相当于,该服务器上面运行了etcd、docker、kube-apiserver、kube-controller-manager、kube-scheduler、kubectl、kube-proxy、kubelet,该服务器只有2核2G的配置吗,虽然我已将改节点移除K8S集群,但是组件并没有停止掉,所以我尝试在1892.168.1.123节点将docker、kube-proxy、kubelet组件关闭

[root@K8S-MASTER-ETCD03 ~]# systemctl disable kube-proxy kubelet docker
[root@K8S-MASTER-ETCD03 ~]# systemctl stop kube-proxy kubelet docker

6.再次查看K8S节点,已恢复正常,并查看etcd集群健康状态,已正常;

[root@K8S-MASTER-ETCD01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-node01 Ready 14d v1.16.3
k8s-node02 Ready 14d v1.16.3

[root@K8S-MASTER-ETCD01 ~]# etcdctl --ca-file=/etc/ssl/etcd/ca.pem --cert-file=/etc/ssl/etcd/server.pem --key-file=/etc/ssl/etcd/server-key.pem --endpoints=https://192.168.1.121:2379,https://192.168.1.122:2379,https://192.168.1.123:2379 cluster-health
member 140f63cd51ff8859 is healthy: got healthy result from https://192.168.1.121:2379
member b5900dafc7a3b5f9 is healthy: got healthy result from https://192.168.1.122:2379
member c48307bcc0ac155e is healthy: got healthy result from https://192.168.1.123:2379
cluster is healthy

问题:
[root@K8S-MASTER-ETCD01 pv]# kubectl exec -it my-pod /bin/bash
error: unable to upgrade connection: Forbidden (user=kubernetes, verb=create, resource=nodes, subresource=proxy)

解决办法:
[root@K8S-MASTER-ETCD01 pv]# kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink 的 Elasticsearch Sink 提供了默认的错误处理机制,即在出现错误时将数据写入到一个错误数据集中,并记录错误信息。但是,有时候我们需要自定义错误处理逻辑,例如将错误数据发送到另一个数据源或者通过邮件通知管理员等。下面是一个自定义错误处理的示例: ``` public static class CustomElasticsearchSinkFunction<T> extends ElasticsearchSinkFunction<T> { private static final long serialVersionUID = 1L; @Override public void process(T element, RuntimeContext ctx, RequestIndexer indexer) { try { indexer.add(createIndexRequest(element)); } catch (Exception e) { handleException(element, e); } } private void handleException(T element, Exception e) { // 自定义错误处理逻辑 // 例如:将错误数据发送到另一个数据源或者通过邮件通知管理员等 } } ``` 上面的示例中,我们继承了 ElasticsearchSinkFunction 并重写了 process 方法,在方法中捕获 ElasticsearchSinkFunction 默认的异常,并通过 handleException 方法自定义错误处理逻辑。在 handleException 方法中,我们可以根据实际情况进行自定义错误处理,例如将错误数据发送到另一个数据源或者通过邮件通知管理员等。 最后,在 Flink 作业中使用自定义的 ElasticsearchSinkFunction: ``` DataStream<T> stream = ...; stream.addSink(new ElasticsearchSink.Builder<T>( httpHosts, new CustomElasticsearchSinkFunction<T>() ).build()); ``` 在上面的示例中,我们将自定义的 ElasticsearchSinkFunction 传递给 ElasticsearchSink.Builder 的构造函数,并将构造函数的返回值作为 Flink 数据流的 Sink。这样,当数据写入 Elasticsearch 时出现错误时,就会执行我们自定义的错误处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值