您好,登錄后才能下訂單哦!
本篇內容介紹了“zk中選舉Leader時的網絡IO QuorumCnxManager是什么意思”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
每臺服務啟動過程中,會啟動一個QuorumCnxManager,負責各臺服務器之間底層Leader選舉過程中的網絡通信
當集群中有服務器服務中斷時,zk會重新選舉leader
內部類
Message定義消息結構 包含了sid和內容ByteBuffer
ByteBuffer buffer;long sid;
InitialMessage
QuorumConnectionReqThread 發送連接請求類
QuorumConnectionReceiverThread
Listener 端口上的監聽
SendWorker發送線程,從發送隊列取出消息,發送給對應sid機器
一旦發現針對當前服務sid的消息隊列為空,那么要從最近發送的消息中取出一條再次發送
為了保證服務端服務正常,zk能夠保證重復消息進行正確處理
RecvWorker 接收消息的線程 不斷從網絡io中讀取數據放入接收隊列
類UML圖
屬性
RECV_CAPACITY | 線程隊列最大容量 |
SEND_CAPACITY | 發送容量 |
PACKETMAXSIZE | 包最大1024*512 |
observerCounter | 觀察者個數 |
QuorumPeer | 集群數 |
mySid | ip地址 |
connectionExecutor | 連接線程池服務執行者 |
authServer | 已驗證server |
authLearner | 學習者 |
connectionThreadCnt | 處理連接的個數 |
recvQueue | 接收隊列 |
方法
初始化連接
public void initiateConnection(final Socket sock, final Long sid) { try { startConnection(sock, sid); } catch (IOException e) { LOG.error("Exception while connecting, id: {}, addr: {}, closing learner connection", new Object[]{sid, sock.getRemoteSocketAddress()}, e); closeSocket(sock); return; } } 接收連接 public void receiveConnection(final Socket sock) { DataInputStream din = null; try { din = new DataInputStream(new BufferedInputStream(sock.getInputStream())); handleConnection(sock, din); } catch (IOException e) { LOG.error("Exception handling connection, addr: {}, closing server connection", sock.getRemoteSocketAddress()); closeSocket(sock); } }
“zk中選舉Leader時的網絡IO QuorumCnxManager是什么意思”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。