From b76db9fc6ea257551df7fd410a4f903a5162b8d2 Mon Sep 17 00:00:00 2001 From: qoo332001 Date: Fri, 26 May 2023 21:51:09 +0800 Subject: [PATCH 1/2] add experiment replicaLeader --- docs/balancer/README.md | 3 + docs/balancer/experiment_partitionLeader.md | 193 ++++++++++++++++++ .../resources/experiment_replicaLeader_1.png | Bin 0 -> 35533 bytes .../resources/experiment_replicaLeader_2.png | Bin 0 -> 35706 bytes 4 files changed, 196 insertions(+) create mode 100644 docs/balancer/experiment_partitionLeader.md create mode 100644 docs/balancer/resources/experiment_replicaLeader_1.png create mode 100644 docs/balancer/resources/experiment_replicaLeader_2.png diff --git a/docs/balancer/README.md b/docs/balancer/README.md index ee168bd59b..2b68f16bc3 100644 --- a/docs/balancer/README.md +++ b/docs/balancer/README.md @@ -13,3 +13,6 @@ Astraea Balancer 是一個 Kafka 節點端的負載優化框架,其透過使 * Astraea Balancer 實驗報告 * [實驗報告#1](experiment_1.md) * [實驗報告#2](experiment_2.md) +* 成本估計實驗報告 + * [Partition Leader限制實驗](./experiment_partitionLeader.md): kafka partition的搬移過程中會產生一些成本,在搬移前先計算出搬移過程中broker會持有多少partition leader,並且對其做限制 + diff --git a/docs/balancer/experiment_partitionLeader.md b/docs/balancer/experiment_partitionLeader.md new file mode 100644 index 0000000000..ed771b93d8 --- /dev/null +++ b/docs/balancer/experiment_partitionLeader.md @@ -0,0 +1,193 @@ +# Partition Leader限制實驗 + +這個測試展示目前的搬移成本估計以及限制 [#1780](https://github.com/skiptests/astraea/pull/1780) +能在進行負載平衡的過程中,計算其broker會持有多少partition leader,並且對其做限制 + +## 測試情境 + +* 我們透過專案內的 [WebAPI](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/web_server/web_api_topics_chinese.md#%E5%BB%BA%E7%AB%8B-topic) 工具來對測試叢集產生一個負載不平衡的情境 + +* 本實驗報告會在搬移的過程中對broker可以持有的leader數量做限制,並且對比有做限制與不做leader數量限制的差異 + + + +## 叢集硬體環境 + +下圖為網路示意圖: + +``` + [500 Mbits Router] + ┌──────────────────┐ + [10 Gbits Switch] │ │ + ┌─────┬─────┬─────┬─────┬─────┬──┘ │ + B1 B2 B3 B4 B5 B6 Balancer +``` + +每個機器負責執行的軟體: + +| server/client | broker1 | broker2~6 | Balancer | +| --------------- | -------------------------------------------------- | --------------------------- | --------------------- | +| 執行的工具/軟體 | Kafka Broker, Zookeeper, Prometheus, Node Exporter | Kafka Broker, Node Exporter | 執行 Astraea Balancer | + +下表為 B0, B1, B2, B3, B4, B5 的硬體規格: + +| 硬體項目 | 型號 | +| -------- | ------------------------------------------------------------ | +| CPU | Intel i9-12900K CPU 3.2G(5.2G)/30M/UHD770/125W | +| 主機板 | 華碩 ROG STRIX Z690-G GAMING WIFI(M-ATX/1H1P/Intel 2.5G+Wi-Fi 6E)14+1相數位供電 | +| 記憶體 | 美光Micron Crucial 32GB DDR5 4800 | +| 硬碟 | 威剛XPG SX8200Pro 1TB/M.2 2280/讀:3500M/寫:3000M/TLC/SMI控 * 3 | +| 網路卡 | XG-C100C [10Gigabit埠] RJ45單埠高速網路卡/PCIe介面 | + +下表為執行 Astraea Balancer 的設備之硬體規格: + +| 硬體項目 | 型號 | +| -------- | ---------------------------------------------------- | +| CPU | 11th Gen Intel(R) Core(TM) i7-11700K @ 3.60GHz | +| 記憶體 | KLEVV DIMM DDR4 Synchronous 2667 MHz (0.4 ns) 16GB*2 | +| 主機板 | MAG B560 TOMAHAWK WIFI (MS-7D15) | + +## 叢集軟體環境 + +這個實驗中包含: + +* 6 個 Apache Kafka Broker 節點(version 3.4.0)。 + * 各個節點包含 3 個 log dir,每個有 844GB 空間的 SSD +* 1 個 kraft controller 節點(version 3.4.0)。 + +以下為建構環境的步驟: + +### 建立 Kafka 叢集 + +請依照上述的環境建立叢集,您可以使用專案內的 +[./docker/start_contoller.sh](https://github.com/skiptests/astraea/blob/main/docs/run_kafka_broker.md#broker-with-kraft) 來建立叢集 + +## 效能資料攝取 + +整個實驗的效能指標數據源自每個 Kafka Broker 的 JMX 資訊,這些資訊透過 jmx_exporter 輸出成 Prometheus 能夠接受的格式, +接著以 Grafana 繪圖觀察。實驗過程中我們也有關心實際硬體資源的使用情況,這部分我們透過在每個硬體設備啟動的 node exporter 和 Prometheus, +進行底層硬體效能資料的攝取。 + +您可以使用專案內的 +[./docker/start_node_exporter.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_node_exporter.md), +[./docker/start_prometheus.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_prometheus.md) 和 +[./docker/start_grafana.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_grafana.md) 來建構監控環境。 + +本次實驗所使用的 Dashboard 可以在[這裡](resources/experiment_1_grafana-1663659783116.json)找到 + +## 執行實驗 + +1. 首先取得 Astraea Project + +```script +git clone https://github.com/skiptests/astraea.git +cd astraea +``` + +2. 接著執行 Astraea Web Service,Astraea Web Service 提供一系列的功能,能幫助我們對 Kafka 進行管理和操作。 + +3. 執行 `./gradlew run --args="web --bootstrap.servers "` 來使用 web service,其中 `` 是 + Kafka 對外服務的網路位置。 + +4. 完成後執行 + +```shell +curl -X POST http://localhost:8001/topics \ + -H "Content-Type: application/json" \ + -d '{ "topics": [ { "name":"imbalance-topic", "partitions": 250, "replicas": 2, "probability": 0.2 } ] }' +``` + +對 web service 請求建立一個負載不平衡的 topic,其名為 `imbalance-topic`,在這個情境中我們設定其有250個leader,replica備份數量為2,總共500 個 partitions。 + + + +### 未套用成本限制 + +1. 執行下面指令來針對進行負載平衡 + +```shell +curl -X POST http://localhost:8001/balancer \ + -H "Content-Type: application/json" \ + -d '{ + "timeout":"30s", + "balancer":"org.astraea.common.balancer.algorithms.GreedyBalancer", + "balancerConfig":{ + "shuffle.tweaker.min.step":"1", + "shuffle.tweaker.max.step":"10" + }, + "clusterCosts":[ + { + "cost":"org.astraea.common.cost.ReplicaLeaderCost", + "weight":1 + } + ], + "moveCosts":[ + "org.astraea.common.cost.ReplicaLeaderCost" + ] + }' +``` + + + +觀察broker上的leader數量的變化,可以發現每個broker在搬移後,持有的partition leader數量有變接近的狀況 + +![](resources/experiment_replicaLeader_1.png) + + + +broker上leader數量變化: + +| broker id | 1 | 2 | 3 | 4 | 5 | 6 | +| ------------------------------ | ---- | ---- | ---- | ---- | ---- | ---- | +| before partition leader number | 152 | 84 | 12 | 2 | 0 | 0 | +| after partition leader number | 42 | 42 | 41 | 41 | 42 | 42 | + + + +### 針對節點套用Leader數量的成本限制 + + + +1. 進行下面指令,這次不同的是會對其broker可持有的leader進行限制,將broker4限制搬移過程最多只能持有25個leader,使用costConfig來對其做限制 + +```shell +curl -X POST http://localhost:8001/balancer \ + -H "Content-Type: application/json" \ + -d '{ + "timeout":"60s", + "balancer":"org.astraea.common.balancer.algorithms.GreedyBalancer", + "balancerConfig":{ + "shuffle.tweaker.min.step":"1", + "shuffle.tweaker.max.step":"10" + }, + "clusterCosts":[ + { + "cost":"org.astraea.common.cost.ReplicaLeaderCost", + "weight":1 + } + ], + "moveCosts":[ + "org.astraea.common.cost.ReplicaLeaderCost" + ], + "costConfig":{ + "max.broker.total.leader.number":"4:25" + } + }' +``` + + + +觀察broker上的leader數量的變化,可以發現每個broker在搬移後,持有的partition leader數量有變接近的狀況,以及broker4由於成本限制,導致broker最多只能持有25個partition leader + +![](resources/experiment_replicaLeader_2.png) + + + +broker上leader數量變化: + +| broker id | 1 | 2 | 3 | 4 | 5 | 6 | +| ------------------------------ | ---- | ---- | ---- | ---- | ---- | ---- | +| before partition leader number | 111 | 92 | 20 | 9 | 9 | 9 | +| after partition leader number | 45 | 45 | 45 | 25 | 45 | 45 | + +### diff --git a/docs/balancer/resources/experiment_replicaLeader_1.png b/docs/balancer/resources/experiment_replicaLeader_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdded5350dd6fb16abc1f08e8eb41b25d17bf35 GIT binary patch literal 35533 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%0AD2;JKr4XYs1%!LL5P{HMO z`F*|T?kmLhPyPK_IjMy3iS_m-j|iy6Hz`^3nA ziS`D~$$_w*<92b<_cj$GCod1UgC9j|IQ^dEFhJN7*gtYfJc))c;xuCJu63l1#r%45 z3QbL){Zr-c10ay(%XWdmgdI4KPRaqfJEs&8Y7%Bn)tB}NT=8G4M4B)|x*}nS2FIR~Pq;zK8+hxEn5OY2v zc*n>(&RTLhb8cV;ECIeW#7#PVu=U2uCm*C9+Itc&l?c~@}2^#S8XTVlr! zN)Y!?)@*&_SbO?{X}GN3ZW#z>EzL^1df!BtN%F%7qy!_+1TnSH37SCH>(7LJd~fPL zsH*ZDZ6X5kr8KYOLjN;+wW;{GZ{NoL+V*>ji^$-Xx@~787257z-DZLH5VY2Mle6>YbXP?_pGO=R_LjiX8P3Cx{B##L zi!$GdO{2bt=lbuBFk}w;W0&2(8epBD-^Sx{aBxuDhL#tXcRH5P3&(;vIvrum0r|`Z zZIkub6yE+YAH!wz(rsw!Rqo1z={1A?8!opBN}<(>{poV@%5dzr>~r>elXzS{v7<9H z0-d#XG_c}VL_DKlx@r(ew(+(*Y(KCJ@VNne4I7Amh1r1sZzDiV9RcqaaR2dt9Ge>a zd!z|Sx?BA5H3E&qn)M@s7~o_kG$9a-9(%JZA3ae4N7kZZ2AH)@jIlcJIB<#5^4#X2Kvll{$A^TH)aLk$6pQhcgjkEBxZLPUpAga3Zj9|J+#ow<8jz8M zo4CXczfQH6nxUnruJ(K@j18T=gNDrmewSPkegYERYVH+p+1nnJubdB_3!HW#a)I@4 zm@s9jlfUt~_ULvr@MaNTuq=+YxnH%Ix_Cjr$!t_u9-=!~%uF;-()`Db6EkWtOCI^e zCRw9U@ciL+O#w9;IdcqE@G!S4cFS7-ZG0&RG+y^%ua1S!Z4dw5)SJBS+5?|`$qk<} z%w(~~+Hxu!D|aI2j+3X*nx$WUGaiU;%Gc3|1bDnaczLar<4|gGR+Nd1PohSEt~ASY z^C`kYxdutVA)N#hW--bMy^|X<92G@noy%00#R+FLZO}ciJ}B#|fq?xU(aagPB*3Yp zwUsv$V?>;m7ittd{c2j$jj}Or-R)~}Ar+`+^b9)2Zj+sqsBXZw8ND#Xg{ovxua|YgX#6fAz0WqqbbD{F-T$|h!K|iSSAzs)fCFiJoa*3= zdt1GATl2S4B@(GiC#$wV`!Jc{$aokX(L46FFq_zmxdpv(VEk{+^wO%aDEXCE1@ofzBTVl0wOVGQnSkfdTXLMb|+3H`3D20srIo<(9v z;|ttmB3d}T?-t;+cngNN8s7Pb^z=G6eGgSJ?J8f;{DEm9t0}}v=P~vMQ6+n@namzH z`kOJTKRU%Cyj@`bXS?`(fEcASIt1mM$V|MJst0?Wi&za4lYfqxZEjhsJ9Z;xVSdI^ zS?YAHkV32MU?vU+xugGxKGvIR@J-XvC;-pmiM z_luWkc1;yQA%P?4P}BNLnm4ucbj7-4u%G;NMoW%$ptcsWceaN9Ej zs|Mlj+IwM}IfI{=#EJ{s-w#%MiTG?8b8k;4iDKWYCfS#8jEXUVnl7-_Q)`Vxl9H&) z7FHdP{(Pi)E{EsRT7BQ+iDUv*n$al^u8JX2vVc{NzsKN@3vNX3iQ?nM&>-oh#evXO zv&H_r53f_z(n&}w7^K64sJin~k*A>`OwyGG zXZvAmNY~%=sA(!$>@9U}K2;JwkJ!e0F(XTxOc51hqKZeyvFCYnv;zOJ-L+W=Eg%z= z#M!=obz)o=7a-|Y&$_p6XIA_?>#lFMt(ZE@SYdnl0#d^{&MXkDb0ee78r3Dp!{(Ia z7dmMcVG}k#vtSc);5}_kEUX}-)~KV=MaqO{?)34NM*qU2CmkEF=Tp3GNcjdYbvOr@ z(U;NrG@4(4$9~F*p7qy(=hp9=)p;F>{T-@{HeyVkTC!*(rY8tH(EErEg@=zF^vlBs zr)+nA+k6BNVq$#kyxx$ofg)3q33&qIjNSQSvSx5vv|zqR0c*^e126$I7AEA&l5-Y4JAWLThPRfF3w?_IzL z8xScw!|Ap7yZD^nZJ1Atlf#3h#PPTTuSzb-k3L}X$`gu!H&)hz*wjt@o!7p6EN1lZd+S`Z z%OR28KgD?Vm{91Fyni zX^h4;zj9l#H?Z4U`+1$FbbSVN?uCwWPDq}#xqvYU!Pea0=36&R9_k}lmqgOkb2tsJ zN=(R&>Fb#FD=rVcJ3be0iSmcm_}#1N@EmkOOt2@V4fP#6u%@u%5amBY@bkZz3!nEo z_@;Anr`lY3TjNz&RxT#akfl#gr&VG=kE0jTTRy?6UQZv(i!k3XD=0SxGNuk<%?=sh z)V2WwX$wHjpQDDMib^Ad*z=Q8}`&!z_UPdPnpMIVApozEH3h=IbuOi^&Qc z*QL>61#_KrZb8|zy-X2HX(N$>hANazT28L#uxqIbqe9jl0+0m4<|DG5UFT>r`Y)Yk z*M7$h%)P?Fw6|1v&4VThrYx8zH8zF|K3J+*M)#Y5x6jK$hpf}sScj#RT<-6=;fM;0 z_skMV+ff3-T$U$oHG-b7K<*(d++n=5SUwNF%2!s~yP357Q&&7}jWu!Wms|6kwI#8k z4UR$M;p(q3D_v9sadNK$E*}2m)uzSWIUfHpJyCW%(&==myZGI4NwXP}NYO<_E#5jOUmPyoI>%hR41`2gFlbEN4#HIJL6xdG-kA_M zv7WldWQB4e1nvta>FwY4quuTgTfG;uv!!!Ii8!xrOvY&Uy)sJYo=&gU!C$4K$#V46 zsPh<&|F!7=ewx4fJkxo8u}>D>m{Wn%Q&h~RF^t~M9a2~wzi{K?Pt$gV^b8?m`*gWO zJB(nwc8Y<&MQ;zY(Xxs9or~4PU`5g3nXHiDXC*R`L{9}q;mI7cN9N>r~kVzM_%apsnOU_DRMvdJP7?I>6eDKdevm-t zZ350o7l8O{KTy1+Oc@cPa7oD`b4Xx`3l67++9$0l%+629@`}V(bC+)s)U&?ARGKP$ zc15@Pq@BBw9VsH-@oCh8chX`&>--7lQ;no37kwdEVc~E;c0LDK^y=p+dsZ{&LWF%1 zhq||yPMr+dP-2Wcv_}=Zm(o>m@jZkWs~;7mCZqd5@N@qdT~4v=R_b6>7aRJ?m*4hwwnEwR3*i_7rj#+nvUio= zuvOi!a6lH##6ww=YY1M}x(hxJ&N?pXA1U<|I*ynM9hpPiG@YJ|h)!+_0DLq%q; zI#m=Gl1FccY|zVyD|o~|5N@)u?srG@>(=|NG);g%-y7@M;xonC8$h}=={C>HPCa=U zlr|fz6Z2yr96|L&pS-4Xh%P-vGblaR+lG6{F&A(4ztCVUddJakd8O7ddy9SHarG=h z$7a%UO-JTTB)E`gG9%jdggBgYDjML@9XrI7lFGVR|5lz3KAcBE1ZBxiVQ2fLghnkj`Y@O-pT_?KE1IdXg9}n?JR`XtCLvyp{ zh;fQa9>RnvIayBd zg4F4vwB#=ZY`PaYQ8crde9)%6c(ENn)C66XhIX{ODveG zFMFIopg8AOIyk)AOdzAu!V_di0ZiZekQV+Ug%y4h|NO0Il84x)TC5gDb42Qg9OFpi zxZxSpH&yCN9u_T{G_5y>nKEAVe6m#b7&l~eB_HiOb`@T%>kv1; z!K|&B#Idj&ls0~Yy{toUrEjQdZ9DCQvZ>;o{%%OBff*6jIj!dX5vsiZBD8em*gQXL zrgz;nqF~ELx)(TSH?F9Xaxv^&or~2rH6aR~ z7GW)2?uy~BBa~+P?!dXHJ~0Jf<3$_M?n|08kr28js4Iy?3qQu8l4KrMM?U5?@ZFqr zNoKM?SR>QM+G?1~t1EXF{^3lx>t~MI16ZR{X_W#-?g2mKLZmN1piK3l+GJyz$w>z_ z;SzTfW2NGN(%~mv7M9T1Dlj3)sDy|Jj3drzsX!geuKMmZCVf1#;dX9|S}CV9or-d! zOpmDjR#td4%{4JCqY+ zTFxuR!9>5Ozqyma!mNZVL9TxE^>b4bb4kDL)&!=(ZE45JmO7o|EoncaB#|EgLfVNNx^=A@SM1hzQ=J58!Wpq}zvHXF&?gNW#PW z=5I2anmA}IRKf+w`Xv>*AiqE$i7pulxujJ(s;D|-wc4pzJPhwBw#P_l1~X_E zD6rNc;riRNdCP7sdX)4XPT6f*{IyBTa2g|grX#7sRJ$3lP9T2YrF*91+=v(sO7)1= zP(nwVkn)TdrvaaRR6Mb47oVHtbA{2(?2TC79@X{RXS$oOSRF2YL~0G`#Vx+U;1xSC z_chQcqm`U*&XT`)%OgGfn%~1^qv*XPYbO_{0|**+W6fJ6 ztf8^V^;Q$QGfd!Xgt-pPY9kN`liv08tbziBITm0nzOi=mEd@deXBtA*?-i0C8A;xz zBsY?j)4}IEyszhM{6>-M(ssX|3s%nmqBgcf0U0LlFLq8Q-RZ)ja5Xrv(R1UG6ibm& zEB@>l&mQX4QXZ1!C*`j28cJmp2r0N$6-kWksGArmV?qBq#yUXVN3dqa6K>~Ybn@*- ze@@AHWbJqzzc%)3o-pkRhq2Y_%~w|Idw2wUISbAe(GUnRY2|plq85S1=W=JxXpPM35-kz69{uw|avA5huqr5Ltk3#JM_J}&}aJ0p@_{ACn%SrW0n&{bfI32%B!EU*^6}O!$Z)Y#fbC1~+ znm!Dfl`C!OADHDwKKT-qtC6l6!cUz3S$B(6NHUW*x}~`P9h-@y zXbqC9LLc@`#_~o|HdJR=sG8O&I>&4I{FUJvjj!xI+hC!#mPjagz^cN*^FV0HQ(neY z+o<5wN%Yv_E60tnUNQyRIftVg%hlS$E{XtBmCeJ#l8hhJTkR33%ELO)ckQw&Bln}WvKt5SxwuHqx&EG9<7JV z)0&|%+gzwU!IbFFIGbN}A=no_XFnO}1dFLl*SbxPD`+6_u5U z6&sUS=RV~Gd>P1f6mNCz+a$EiMagTU=-{vCbDNh<6yBotF? ze<2RS3a<9STF|f!cQI}{8UCP{ zF=G5ityiZFIiRopw?hU*m`K+5H)$~@*~3(}*GghJ-sDlBmHl=apS5zHczj}mQTS!S zVuxK_V8oQVm;3cxgJ?3OT$!yMg;c3Q=p62}QG}9IOMUf2V>Mg0o;qj$I74_NUKexG z6@~(w`+WSK8`7)H)Na4t1o*XQG|LlWKK6K)cX{a_e5>WfxWQ3lHS4^-qBzpiF#E-z zKzr~RyYV8hJVnJo-(3}>mRG_$?2q-7UtBJ@Wh_8(X~)laGW@epS#>JsrvMCWcEinZ z_ia%8VK;OklP0CZ^@Y`v9jBs&b=TI*RifsR z!49PZj0`U>U=fajZ*;f%XSIbV&pxQ-v~toMMlD-~Wcdd;Vv{T`vX*7CruECGlPGI> zUNtG(i%RDw3#_4#;$-ghJms476;+>bfB&S(kAS}~b8DsNLjNZLv@~XON-sTOQKtg^ z#QRV-f-)0OHG;cS*vLOFUkaO{mPAIpXW|uTD@^)Vos~a?=T*gXIp&S3P0grlj zB-$t)<=3~oBTuiVekZ4tV&A*7l=rclr&6oZ>i1z4LI(GpNwKxD*Ln`drR?Y(Eo_w6icF2?DF_)_#wA;Sgc;E!u*w5fa! z$$ekbj7c}kJ@r?lS9rfdAW@-dZ(g@@*>BdwMbB3Hur41geQ)$UX<9*ceGrIjc+u@u z?Wt%wH=IfjK=onwr^AK2j%l0VL`MT`W`cdZt20Sl*SD%i0m zw!!l6V5=7Ww0UkrpS}Ghqpf(u@fwn}K@P9<((wf+BWddU zvh$=NQhYWRHOU^b4eit4c3wr9sgB+WHW>{Ema?7@ZLra+JK4SacW487dFeLwE6P#9 zdkY2YNT2{il%49z-B2RT9*B6{kC))w>oZH{Ml1S1(1N--dB!zj+BP;Dg;oo1Pk(=; z*|R3H^&MQWs5a%+^IAi-M5#XEjrIs&aHI|M^e$7}fNMweR@{X9v6UH;UMla+Gmo4> z7xYfNq`D~M0BO(+k#%Xs*|`AD+!Wv6|H(%*TEGixD6V@kl(Nuuh8;d<#6y{s*_W}r6G zrHB@7j4+U;Gd&Pk*5O*#`w64Pp!90uH0W%Qpc3zuwZaLHA^6i>*MD;~$>gLms2MA> zMcEgjMWjJ%j}{)9uti2O1+}pFu$8px z41~GQLBlucni5-3N6F7>csGUux&mC9PgIC>~ZzQE57u$%QTy?r7m4eC?+?urU?Ke%HzMwE$S%o zzdSVK=<@glKkGf$N&AI4`=Z;oaOSYS>7%ZyGObDcti1PdoTbm)z0ZQ-enpo#20g2I zUdinJ`EjTNCOxiwttBXHwOTA|mhm20{IISc2ogB|4i8SaNGXLdGfM^QG^Zz5+Uotl zuiR;@O*TO`v~SFEA!jd}>n4}JS+q$1;x(Lfsc!cWXNwx4P~00VyJjWr{*?l>S=O5o zM#OI=AAPeJE78O=s+fGP@fqBMeQ`zU$-@>Dt|R+SSddea>UFFs5k1;zWC#R)=dWf~ zsu`J=2c>ttT<{c_L4Gn3p!euVoZ8zhsHj)RF?q+EHC|$z`<29n0mqRzoWj|Gq)Z@E ziSD(UsR^Cm9kESeRUM0%wCP8BqZoEIRA6jcM%>L9QizF0*qIb?mUZ@6)*O z;px{FRS_u$JO<=6MMT6Y4KhuO!et%7GAb7&On4BwDqn$imLK|}vqaGUr@gldsv`)u ze`h0s00BY>65N8jySux)ySoN=2@o8DySqbhcXto&Zg=O%%YD0b&;RA#Q$@kl26j#N zp6TgczqP*3qsncO%a-3*@r7}P;UT4wl@@|NWG`X6H%-QKtf%7o(;6j@=gX-{f_y4F zey7cBj_t_t-XWS-9_O&2w%D%-Ma5- zY>b?rl05U~B($^OC;pc$o&55O7xc<LQ|S*7U=7i zJhyd^K6)EA6#p3FMkzL^jfa}0saa!r>HoJbeBU~6e5>?jX?Bs;fvJ~`Ix^ub?7+CqsYU`=jwPO!uBBT2;Do~pMRc3pdzg~C=B&Zw40lYYe!T;& z61hXQVT6IE*lLH6OqOq{pEX%iqyze4Nu}Q(2jNR>E^J8YN6bWWGA?2b6xguH06qW9 z+7m54P5g!7hi@x=F>rx3*b)iVWLWJC2Ix%6V)ePTX{R0W?!NeZd;xazE+-k+Bp|1@{>)uaBM2` zFj&g_jN|r$QaTjpI^`tBvT3|TX-qZsxf%2MZPj6m7G{@66s+;eMLpv{z3FrDiNDmx z3z1~-8`P|9=y;VpSg|&eIAl5R#M;DmUO~g;e;ZNoXYp2vUjHUVPAQfRkmZl3hny*y zG260ot37f3IxLAWHe`lQ)t!&BrlvOzQxVZ|$}1ywZzD2 zytlwf<7sSiwgZ#!n-CJvfoEsg^LMT}WgRQb{dxAtg@zu^^!m@RY`hedEL81B=^&ts zf7G5W5Ck-BF0->(JU+m~`13Iu_=Sy^d|UWa9d$>RFN+&pDb~n_t>xKACc8Xd(<(i- z79AbU(Ib#ZcRzXUr(#6$ImjsGaGLbqppnSrFI~UY?tM1h&rp!;4g1*>2#7t=E0|?H zQg^@XU&+e9BxhbS%d<>|^dmhJ|8b>P6PlA}4%4vx(H5MkYhK1`8DLLtwkdAe*H#n# zMb-D^3_L%jMhQ6C9T;0%NbRIEw#@~|J`1?tM^a)KdNWbM}Ypdt|&vt1hXH&M%0gvkZCnc zcObQTa(s2HttiP2o)7DDHpp;LMF@muxeDP&hPt%9KT%v{kHQE#-1uNX0qy^LHR}$0pktb?9pjwj)*@5+U45z@cv!}vLQBwKpG14fyn*1 zj9DW$E+O){%7TB~;o|K>2xbsnb1Juz0e(xKtRj%B99d~@C-a+3`v8V>@QJ+Xvsq{l zPvH(ht!DG&M2hWM5YTi8*53U4c*=yxXIx-lXg@)*!A32mmA!)eHe=^*d{&4**esuB z=I5ilO~BjSt)EUI4?Mzzc%9^GY8w(DK8y52ty_e3|Qm)5ih0@+jgoqqa(z=|^5kJjU#=#FmFOL)x# zscvM#Cx)Th8(*i4jb z{CKC+nL#|adm!uzf^htiuWH8F7>M^t7H)lzn@|w7wvkMhz(}=Bs4y{Mc#S%vEy;os zKNW47>8uPq>NI{pH8xIR0s?IsS92UJPgy%G2GKuh{f%Bjgw=aI@`FaE!rhxrr^R05 z&N>Y2In{o1p5Hr8(uij`cc95Lc58Z7AlvJCZ@ljBb8Yn0w8ljQ*xmJzS?g1Qv+QS3d}>y|oYKo1#2C$H z^O?Hn%MZazB#xC32yFBg+ge#0aanaT+Dsf5L})s6jOu0+ms3T2pews519y`e$_-Sw zO1kc+R=h0oQ_UYgGc2h-*3ah^*`Q}V{|k?ayvyaI6eh&)UM7Ugbf{u#+q`P3OwE>* zu;wPN0C|$H5U}R_i+znaUMmhdc@vdplqjPf9yCmB{$j*vHe;QOah(s*oTcMys}C8T zH|EMOIC;pcmZ<<=ofwt)W3Rp2C5{bL)#Z&i>J*yBLrce4e#{Hkv2F^2efA?A%9Xbd zY^+!)_jR0&%=!s9*d>--Nh50n1&|>cppRAqCkANEYOVv-Sgd~pjJD0J13#k(n7Pc= zS&YV3M9{KnAva_)C6PDCb-`hFufhT(dGc;FRacHFC^Lli9_}#~_CH*Ono3mt0^(j# zzd7DQ$XR?Fdq!XB{^5?+XPr}OsfZ|{ysp)-!~a_Nh09jAUgh`5G#S#BGRLd1={ag7VrnGA{`smo<^eTt%Vmo2e4p?xH_2>n$LO+`rXf1bJN(j zp;6sD%X%2GyR@G-hg$NqmCji?Wz%LL=UqqJL2(-IKg7>zY?| zmFR^8B%1M}=sKoIu(|P^$W!5fUKv8FT0SHQ(90h5H`V{^5}>S4({T3}as%<%l)mwB zT8RU3tC`Ozk_{D>D9mk-^G`QEJ~7ndA4Rb$3O3s91gy5X_0q?c{bfC!=4)~ayN~|( zZrsnPcUTj;RwjhtAHivezLw0KyI%`xMyJBp+4-Jtzov9AGm`9JxFj_A;P0vjrJdV) zyzBIbc=Wu5)Vm7unPN&w+%H`%4{05|C<99F#kT3_Ag`Jl_9Ao&eYprAe< z69g;>Ac-4+e!G0cN1H)_X2b^YMX0)Rx5R#uxrL9QYz7~PA5-#7j7XnYuHi?3<1O;o zr=1?_vk+wTl~;l@Lt#Jf2IM=}XZ73G?c4}~@o%pgdrpDymDIoXKYy!F*{A^l3Tb6w zxVA>VbSZNM2?MtULE=rxi+Z!4Tg@bY3jDP`ywyj%SUbBUjJM!i#apS$SmKkbQmm8n zkR*sh_B`NENd859v5E^1I>2-Ckikm4q~mH%(ILU*rs`O5Ae|Tf}S zBV^P$0uuzdXv&Nf64&xct-=rWNS6r0g%Pn{*lJr`e3~O1gVYa^J%FQ&Bme!Cj_KvH z;iGW6!=Ye{)T*);|CK6u{0TDE6}y1H_FcBWc@KSj3VP(Vo`qv&J;17A{zT6a9}M~( zC;;wjz8q`wka%?kf^&CG9O>&P#R~XBVhLe);f2>Uf3iGGsk}t0K^k4`-NO% zxx0*luRpjov>60JeMQ%j(Lyy;OFx`~Argwlr2BUSy17?~c`sV$^E2)d#1EeE!XZawr{EFrD_D^~_ zw!~!|DV0Ke^het#Y!j#1$eVolRLaGe;Rbj6XYn@33TTcH*nXpEx|^qI`X(c*>)m{e?dy*_6yE#Ny7n%S7i9coF5447tLI?8~&P|s}XDVK_~~UP2Gue99x;;?QkFN z#CeS1PtV`8rH)Z#&26XetWqa^{}NuFfzHbY(E-E1SDFSUoBPtw;&~d@#C}dSX#k9aPy5qjlq!b?C8Ipu)$f?Xy>xD; zE+a?w)Ka96{amGINg)-!vuvqy)BAtT7>7lU)6NV4+h_JP-lf_7r;<0OZ)L@uI8eX@ zb6N=bleX!^0BKNn*N4P##~$wu3E36idFz0n=YFLVNm!d+4PG(y*?YE=v2TCd?M~?d zyZClp$Dl zvl9eSV{*i^n7=-4#d$~~?W%LUk84oiG^*LcfG+srjn$N9&CVUwqBIANk39pBOEdgx zx2C0Pn#XPvNzzU&s$?NH)8@fyi2k)IPDKO>ifgVhAUNs*5MwTRzObf`^f9a!l~=$s zW%7<(EU8?25-yM9-z@kCroI$iTY*P<$3qS%znk|3$^I-E-`vsO(}yrN^dYT=sre zo$Inc!ev3Yheg(K%z*u>3@>`NVXetb?53XOhHFg5cf3#wRQ50r=Z_!i8=p04@DX@n z?s?fldcQGr-FFvMPrM`SyGlvMDP~t@y=j{$noghiCTpYn#=fYjj=dAnopLfk^W7Pz zvgH}!serCQ#YAN9x9my3uJ!g%nkm12i;JJgAr{|ADiHS?=S%}#Be0L2`rZ`Ivn=q8<1u`fnvDjPUhL%JXR z-9&Vb1R%EOdc2Rn`Q;vP;@nMK|6Z78xHKJAr-H?96`h3}AZx3S@-RIoMh~=j6zXc!&c?BD)!67GSUXoY{5hz zXJpjg^UQE3+1e#)p;ldEUB%d*84Cq#WA@&U7h?yVq0j8gy)59SvK-_~>9a~_YUaT$ zAuQ`UzxBkdC8CoJ+2t40T@IWrm+%BvAeoC?b^JoJ1j9o*2L*OZ-Y^IHyD%?kOF zXyxW#hGyM^W6~%bRfsQh*4+1W>vZgykI>#f!`D-nZjX%M&)VI}(3YkqEAWfvi^q8SG^-m+XJXKgmupC*aVFJ$F<(B>kNyvg z7q9oetGj|6z6)!qrGHFJj4|4HZ(R($v^LmyJr^VJqPrVt*7gyL( zpxm}CN~&df`t&8lk&JL;e10$v=|`#~PK1E?4R?X@P!h4KwgidMN~XeEZM63ON!-V* zAJbNfJlsl(vChM*l!MHBl~UtwD{&@ibx!B(*7Np?=w^}2IDnFaynDs(gV9UFZ-VHa zgK~L+YNwmWi31GL*xGL9M{C!aKjaZs>h>OQx|$U=tY3|C-qsQySrg0N@zGnxad`{K zJ6YaE!stK!y9(I0X6Ib5u6^RN?%~TD-gsaVTAGA#%%}(13(D_FjwIJnK^HVa#UkDk zRpnBS!(LyR_H)EAa_h+9e^o*Gsh( zFH=gA-YdX2CGUsm=Z!S2rd`@hP18*1DW7=Zn3i#+yK(s%*4tphL?zfCww%1>hv`Pj z!3_+Fa#%Us8n z6HY_Dw+}6<*!t-Jg><@K>8k^Lb}tr!Ys^Rm3>2PMMYjA6q)vM;tG=}Q$LlS0ANfeI ztn(ileGSv{j8ZyjIE#PfxSvM_$7qNOD%A{`720mU*5 zXr;D_62i)UQp5Uo{sc-^GE6!1OAr3txS-+MjibS7R6pdB>M&s=y(HLkV)qT7J51SEm@fHkOJox$h?L;v`;_2l@ z{bSY`(=OJ+=TBKVmi~}@q=!<%DW1g0ncwO(QqRDpP)YU^)9S?yxR{yh+iHl*d$qjm zIRD5#X^t}^jF*SMI7u8mG`BarS_L_3_ys~>BSHXH z>>36l)XTw_%$Bz@j()pK-*>_mzCfMSt(X+IMkD#YRNExUU3h5MHu2kHqLqDQNE}^2 z44p?bwT4PgUw$fD>FkjFP}{R%SzWDv!Se^$Y}e4S1LYFcv)pc{HJr!yEJ!cBV(3jS zmzztf%6SLaGezDxeS&5KvT8Syvc_S7U+;hRJti_7pa|-ZYE0aHf1|DuoE>>au|mp+ z9s9HfV|pYJ6@bH{l(k#IqMkABkqG|20)`XEp5UY!Vsf@+}tX*=S(oj7?`OP zLkZzsUz{(l?@ZObTvT4v4o>muQY5AVWDcPAyViV$R?U~G7(X05+=10O(9MO{R`WKCQ?%^Kr~>LUKY<{2iO+AL>rS`Qcec~yyacXur$ z2yxS6h0n%$8TaVzZ#Z|&@*P*e$Axy|G$`cah+#>_T?1I2zqa*S7%7kd&^^DpJm2nV zmW*S=t?KKU8qoXlgjD;>alp2`FA=gs@|KaRfC?Extwm$`Z$fMSpoX^?Vc_stM&kx+ z9c_KX6uE039~<^A6jLz?_>nq+_jVDI^>$NeiEdLhT$>g2>iafOUt3;kM?(JJUVwMq z(S_=Fdu9mU_;@(&)S+1T_cuMSPhA22PC_#{5;;2zO!^qQ zv$)njG~GpJj4>a%(2j;r`VXMrq&oWYPO~Bo*I5IALp@5&oh(HDWSVS_rn39ME&BdX zsi)Z>>M-aZXaRSlM=#6_90X_Vo)Wf~e#E7#2~0B=4J?&8vPH~7)9|1_6(x-_U(*kF z8Iqo=TA~sdX7sISXLeEN+>DL;tv=F;4ojdE9@VigGp@xJPiPme`-R7Yy)4k*1fQ)G z%x~!%_HfGg+i_X6lPDq8DnDmiVRg9dH{DtBCTho$gVtdg!EfO5yb>Y%HS2W0LFla3 z27CI`m1@W4ZzV%@iOGVA;VI1ka${(6R3Lvg<$5v$?w|Y(Bbhb8pzU03RaU@vJo5~;qjW}vtq|k~0q7Z)34?mGX0wo6q*95X4_2k(-l~WDE6#W^5Cjpw_?hioQ- zKsTkXyraR^Fom0cGt_hW^$;y2z_Jo!Pkcq)rLnkqWok;^RILbQAJ+qSGF*xzCzgs) z`)OC_#HAMjr$0IBg$Gpxg?=-PXF!`50Dj_(COnC7Q_`-xJ=Zev;)!r5;YY3Qieo5Pw)2ib-p&WcJk`UKat$5e8m( z?G7T28T^PvyP!oCvZnh#2^*@1T{m7w&V9k*{?~=`w}%1Vx62scmj&O~v-{5X*MGnK zP|Ed;s?wrZpVCNj;$_&gF>|;#7b4J*I!})P&>dTFT~9>~VB4*4h2ggcvDU_#sHUNQ zncvX4wg=3P(I-^$jI$Ve11ofm59I@U? z|7~;rakba5@k1d!Oji-3Q4Gh5s37(oI}TFH+HjE1xR)a>RG0L|5#|@FJAD#~lm<>V zH*@?hezVbaqf;aRDx|F7e&sv8-HgpW6?Ni;uZ~^qy-iFo+c+=Vt|8vq(KmSeMOFqh zsKp8e*j4SMw&b4p@wY+l`CdVC1K9-<+I@i?Rqc+`5@HIDD>8BFd)K9N z7^yvWO69*D9z$QYo4VFa4!-R1-?li4tj51pr1^|Oi-^2Jc#N(7G|I9V zNw@WIMyzq6rWy5@qlgl8D;v|2bM&;CgL?_NOa z!49)c0oM~3K43%@hRRRxk_X=C`F2GbADA>OQYL4o0{Mbj@|(Hbo(Dqhel+C zP^l-T+6lslhu`7|Y;QV*S|iq_?;3Tl>;PaZWoj#qM)P#(T6+dOZcHHp$U<|nRRDbP z%5u=E;63DbX5Of5@L~iyRlCb^tv31rGGrUisR0R^jmBxiBy06&W{sQ<7v~8!oE{CG zf#cZ8av>k!Cn(R!-K7b80U^^Y+XkvusE;D9hT^}_5Yv3W#CzYu1Aj-GUW(dyuR%kZ zti%(rT5NUtGe9*=!;?iW2qYv26J*BY*Y8C!{pxd+WM!mBPco$|$rAtws9{?l8Uk!J z$0KeYzgi3XtIJLVeGo+s>-|&yh|YP1zF}`V*PMpc=@`RP9^M&%>hCH21qek8BO%XX zL!|BKi2_(MdBO;n1>kiT8k=w8vP@qo;|XY(@I(YUCXhfVAFEAyrpJcTxB&o`{AO-1 z46L^I@t^p!qxor%5~3fUvAOJsEcT_8)PEKcgUw!2o++UhY@zAcwBuj&nAR#-6aY~g zK{*lu39%wu&0WJ2#u8Eyy@z|;lB!DUpSMbMK!_rDie{s8@O;JQOy{~*FfjY-sEuJ2 z71Hcv%I=O!(J;4JG8b*$a~eNrBy+3C?t4@qA4DrO(kdz`UPGNRYOy~3o8mxP!heLQ zq90!~IHYBrZ}_Tzj$?}-dGRtWw%39bfqBrp5oxm@iY~W#T8%hi2e_UFkRJbZk#FBP z;j)%NQrn=v{~%=X3iG|awQ0*IvVXCtSrXKxAaUyYLNUNEuIQ_+{AL-`VdCcK8#LOz zn!#f#NDTMoPPQ_2{q^EX+{HrAiiRqAhrCaGQYkrchj}j`g0X~%`V$ej*zWUS=B&F^ zBA{qBt4{!^k=1OfW3;U4DJMsib3b)8_PnW&TDLGIMhm*pAY&3CLjM6v`H#_dbg-}= zK@AtEC}nWt5o~)OZ0qkW-Wr-&l2y;V!r`>QOLm?TpQt64%lg154qV#cc|)loatbS1Q!6cG&QM7Fno#y3rOA zKWfOLUhJMOEFJ6Q!#E!i0M-x3Zn|>EcqqRn_n9@4IkZO#MIt}%gSKQk|*)xjr3~weI@oKf!$Vjy9@rg4uc4bb7sWQM##~fWrgO;ydu=(LO#pb<-yOAt!TXp@6)4U4S^pk)&v zh60fBMdH$EAOTQU?wkE$((`vnfbh0M3<~elY6z=Lx?DIg*%0|>Ix?}5x%xR;_E+he zB;=%oc0Ic%R+rF*n3^+#ZkV6JY~PZ7=87Oe*AG6m5(P%ozLT*v(lz`%s(mPdxL61v zx%B{C2I_mSmrKykgEY#KX$-hU_sFHeA7c*KC^MnFgKZDNJy;;b5dZA_1w}4Rne2z% zwkw7F`=fG90H|9~OB`7)r8?X53jKMeJhI@^t^(z1tCzr|mije@Oe7--;+=MJ#d}t!vw@OZPbgL+1ymbM58M;QKr`#j*zA-+-VS?#cQqq%T z{l)83Fn{%YEYYVm^Hz>hszzNKy2720wD4x_vR9MZmLmZfg;C}?hi5LNNl#nn%RCE| z2W>vTg}4s%Y(1q})3hyJ*~{{8UV|H+u>&i7l~{$2dEQHM4{B$^-t05QKijk|d`Z7Y z;0nEQ%;o>;k46ZBe`E}OYx4G~fZkku zWn+n#J$xVi+;RZ%ki*S?=di{*>I!S+q@Hwpzpa)p0>t+3w0Bu`4$aC(g}TLFbN=r* zqF_c~f!6|Cn#|nMsSeXP_g31K-mmdBeJsn$!qHpV_uHrW*$qSpzk}4V9@N*0+Jl|= zKYDrr5`E2E9k%&}r+CK=-G96dDeg$1SPjbY^5Bm=vF}Vi-RLykVE|1->y_-z%C+jk z)<<+Yrfk)O7pQ;BQZq*mB=4bVGD=&qAONw!X=73`odr$pXvC!4p1rE{*gwAzGQ`vB zd|ofa+Vf$qs4{#_sS~3$%Nhd!x8FkyR1_9<_v~f;O4~Y^vBZX^>z~X;nw3E{j|br zlWJ`Dc_dMb6&o!k;wKF(k4%$7-UG!7K*h@vnjg8hb4b>#8VYzz)dw%_eV?j1uiLWA zBs}8`9;HU3XVXitJl0K>%*RcmNE>P2u}{jWqA&Y4rS448<6ELt*StS?D`IF;GUhr= zlDh0vvRv+t)&8c_W~ut67Vt{%`M@PluAC$*m5`+E8GaBBYw#(5OG5tdYY|8OTE7WV z#WU7Q!7#DT_u03S1})ho&J5lcg>ZaW!fkMo$I_%*`-%gI){^Kep4nTiN1XFrHk}8R zq)1j&TuV3mwA`PPl#K1tc(>5oH4gFmHTo3$6tqntv~a9GGf@)t77{OS{wb(*5vS!EYCGd0Xl7fYk(i z@RR4UmV)>{`2)U=`#+8nrw+F1`~wo(Uj-HZ2M@0m3aVigBZ zD-HPbRZcmY_NYAy2}*aH_j$n0X7T>Ms&7TLk)`q`d>CEGwwKeM?`%yYS}Wh&{D~TA zmp1-dB6@J@djpuQRI}3>!?l`Utr98^noPcxT;utiRJ8Gl2UAK1h4H%3hStY2TsvvJ zOv@hCTtAw5Q2{Ggpt$)BPQ((CsJtFm`SIJ6^t`_ttzF|5{99lg13LlxeYIsPeN7~ zupTLSxN-;?vELgh!OoPwt`oGLDN~0gmwD-5KK*N_T|2)|>E=JMf;dsIv%xg)%7*r# z)%CU>dD(uObv|gr=f82o(OE05yEE;HrM!f>wqs*%?sH9FLPL{yM^IhK#m+n>m~c=| zfp@DSq9nme>!ez)c6n4ZR7dm!7lsrEk1zrgDT+@YCiWX^=wf|+HoH^yhp`Wl{*r;a zEK8LmC?6w^ZWHsCw~zc`15!3=&;NQVW)0qe+J1WL#L1laJom061@+_<`y&LGJ@ecm zY1TGfejZE>B57w=$}U|$RmedP@SDuKF7;iLOPbL?|BU!+YP5i=`wuWSP{NeLBm{ml zt}~bVQ-83YC$CkEHK$NZ$(3~Eu`K5zFzrPlR@0Fn*;h@SS)z&1F*M7HZev_YkVTq9 zHOgSPhjWmAq>N`=cgb7&PQB(SljgiS3;iwE1qMjeQp%+K%kKD++&|fe%YaI*uXtLv z#FU|&lO#Kz&hg9G45?&&j#L;aLSo)G7GB#l25%-oH_bP+Ra18(R!O1V5Fiz)@|#vO3q9Oa24IxixDq}7WD+%x`T<_&cepQ}{I3_ky_W2otwO)z^ zmn{_4?IiU%q=~dg)$+)*&|RiYNnpO!#Cq7Jm*>)nSq<9|10a{dkd!$y#AoxV&pu0q zQ3Sh=+-Do{SH843_?&enRXN*gCqw=I8P%ZhveH>Ctxz+no0Op>In{PA(j!`)OF*$? z#K_Q5r39kcsiYYzTP-T9D|T?j$5#m#p^Tu$m3NSDrWd3M?qW?kve4p*9(pUg+-yT{ zur&@Wn^=-t+3p^(q;wn;et7*kKLCiO7}AWb5q%CU{808O%JmhHDyf!o<&zPdT(K-~ z-9#+MsaZDSlx{X{EI7&5cWDAAnlzpJU|b1a{;JG8ql@@=Ex>}Yh2ijyj~GuLs$peq z$B{o4#OV(b2sRByi-BWC^rh2W@u1L zyF!9*;_KnDWn%iwZ>btO>OWNsXn2}%wn$&8559dkP!aaw$iG<#N`ddGo72WX1j&6g zCn@kxIAsDG5wVU|1_b7k52h{M57s=T8Wb?x2ss}-AVz)H-a7VN z($_6yl3=q}byj@9j%jK>0T3b#2x!2jrq4yQ?s-V9_b6oNyRwSE>^=Sn;j(O9JF7hq z!uzJyC`snlUZKAFyAc6?9x6p*-x5a1@}HO~C1dS9d#bxZ60o#&Ucb0V=Z2>bT)v`_q0D^~kp{)6lIS_W>R2KDs_F2;Ic%RX7?cb$y;ahdY3Y zhxR&QIU&g8PbO|@qiZT8Y$SqoqLGB~W*EoAX`mS=z}x#&6*B8lpbZywf@y39c^Xr1z!rT8M zga1Va|7VcF1NaVNLYeV@>4K?Z2#gO=3dT z%Yz%!Qy)I^l;PjC)^^c51<&b%zvXCAZ69G;xCo*l&$hafM}8{@bUcsn$`3C z&Mb82B|wnpZmPVZ8ac$9$Pgr-9;ngy*`;QL2Y2_P_hOgpXaA)L2KnrjU+w7~Q@>*m zs|fn{AcG($Z?A6s0nKq`^)&*&$-h;)U33C|rxZb5YtBOv>|BQ@F{_5sTnU7CPTE%n zG)z8odn*+hO(bm??g@Fno?B1u1F%_HSJ(CM5EWvR6Dgc@+jl?OYi-)pUWZ-%_E=*l zIurL@kmlWoAj)$ma-)9me7yvmF69@OOW-gO^gPD3p8T}Lh_?2FvS{KLv z=S6?6FSM2fpw}mY-r#mgQm@gRlkMvi1}MHTbBt~Fj|!UWVutEmjZTbT9PQmd)JKp zTXCDyC|YIveP!@({tQTn= z!Qd&!=#Tm!D9|Ftflc*I5|-skc-4J0E3$~2k9nTMT1a2y^{TB1t79)b*~Oh&h$)+2 z>s@!evv_OKx~)qlOCe0zd9o)YVf`Cq{JQq49j}O?)$D3Mphup6$LW)}^EZpF<$@i9c6*iLzlp1qK3|Zg3w} zpbx;#@PNi;Pa`6%Yyg0h6&K=HV)k9p!WyM?4urM75+>6?iJ=eM7|oL0tv^dU3x6U5bk+_>)RqmuEc5s!Hv7tAPwmX zAZqzL$geN^BH?;;dI#)OP;wZB71~tC#;yCRgedB*zz|;a3xhuDAV7Z4B0>$@AWo<) zmPS!(Tjr)WAY7{1pT+T#&(F}Iqp3)%eY}8-WeHX`kRFjX&wEP!b2R4k?FF=G0V6uy zIGkZnRxa3DR0H_I!(66*7zDPAc(VjSB`3uw}lCDn+Ul&xpGLzC47h3qyz?-<_ur2%EwiQFm8R+bV6vTfa zIgQEnX)o?^Yu~yM0@9hEI7bd)(RDPb#)z0K7(0z2fjk!VFWl>cZ+Z-+(&RD6((v(i z^wr%(L@ramh=V3qrjL8DH(S?sgul7Ijztvgyf%3ai$VrpPR$QvEaJL5zP zhXccBfCjafOs3`{1V3ERif-_V7AhIb%**umX8C) zUjz2?=g2cmde|S5Yt!IclI}So7H~(v5f(|jY2)pRZMdJEC{UMFT+agj>F>htx=HU7 z$(8Bv^;=|7_Uc!aCKHjtjGJnmEGGK*4bxSqkBq@N^IvkaN&>jvG{0bY(pv zjLJ_Sy={3#fEN4Zt<){kY}yUZGZirxqrm+oj!I2=*(ZQ`fk%fRT`r&~n`g*f3rLeW zhY)NuaWQuuB7_qPe=+3Dyt${=5*{e7nL`k!Cx2AGL_)KOV8^bX0awKaqe`1N#_RR1 z0bdhc0zu^7>njD{Vzdt34LY*YX`c{H(o9r zQ@rDhJ^aC*O_(^J=-Gu;Kw7#mx5q{b&a+LHd4O(BUGrVe#;UHBM$@UzmFj1? z!H<$ZXJ*gD8O|(qF_)P)mtyV4$mYkM*kdM%6BhR4_GiB&<3IMzk4NBPgEj*2FI4b* zs}4mT2(epqHkiIsn?G|tlZsBgY8HdgPfQ`haGxBQaTv$t(5q?29-9k+GR#!I9})cjg{ZH>*#_R@iFwY`xM0KihUqBq zHA`a+8#tLxz=$Cy<4b{VZY3Vhi8+mvXZ`ve!tSgf)hA)Y?7USge(X-oY6sgccPwlD z^HFN&QB~4uauv%O0_cJkD)y-3VfZOqg+rftp><(2W*Dy1iuq*!_}xi1qwkAt8#qtG zWOdCnPxXsv;%Q6FdL=3%SV-4WaAM}<=D=%MTRj{6fW5T6{-Qwz^6NB7=6%`9@;Mpj zvL!2>*2z=j`BF>7TzC|md5@`_dab@QbUMNd<4GA|=ta*K|GLzdSFxk)n#I3?+CM)$ zT7-QQw)Rje&Esf=V^&vz7;M^;HvzIYpu`xWuoRy3aB2uB{JrX z)k~qrZ~bVwQrmlircVBwq4=k2=FLmltHgQlwVi0oWYdm?e;QYLyQ z$kuttO>nC^7`>65qPdP?X5~g+7oUcb74th*fkDNUzvn}a-45$oky6@p>jn33s7pb) z)|uVwMxRzKQ`s;Sv)&J^y2-CKd{^dnmsCj^}B8*6WEW_K3(Erz#t^h`^TbON_60&3{vb zy_?tjjasURo-HxB=fd+&r1vk63m^U??SR}%={MR8)w$%Ut literal 0 HcmV?d00001 diff --git a/docs/balancer/resources/experiment_replicaLeader_2.png b/docs/balancer/resources/experiment_replicaLeader_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ff9a34355667f52b8e4dd74b47dd1767dd10cbe9 GIT binary patch literal 35706 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 Date: Sun, 28 May 2023 00:25:39 +0800 Subject: [PATCH 2/2] update docs --- docs/balancer/README.md | 9 +++++++-- docs/balancer/experiment_partitionLeader.md | 9 +-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/docs/balancer/README.md b/docs/balancer/README.md index 2b68f16bc3..877fee4b57 100644 --- a/docs/balancer/README.md +++ b/docs/balancer/README.md @@ -10,9 +10,14 @@ Astraea Balancer 是一個 Kafka 節點端的負載優化框架,其透過使 * Astraea Balancer 使用文件 * [WebService](../web_server/web_api_balancer_chinese.md) * [GUI](../gui/balancer/README.md) + * Astraea Balancer 實驗報告 * [實驗報告#1](experiment_1.md) * [實驗報告#2](experiment_2.md) -* 成本估計實驗報告 - * [Partition Leader限制實驗](./experiment_partitionLeader.md): kafka partition的搬移過程中會產生一些成本,在搬移前先計算出搬移過程中broker會持有多少partition leader,並且對其做限制 + + + +## 成本估計 + +* [Partition Leader限制實驗](./experiment_partitionLeader.md): kafka partition的搬移過程中會產生一些成本,在搬移前先計算出搬移過程中broker會持有多少partition leader,並且對其做限制,確保broker不會持有超出限制的leader數量 diff --git a/docs/balancer/experiment_partitionLeader.md b/docs/balancer/experiment_partitionLeader.md index ed771b93d8..dde207db23 100644 --- a/docs/balancer/experiment_partitionLeader.md +++ b/docs/balancer/experiment_partitionLeader.md @@ -64,14 +64,7 @@ ## 效能資料攝取 -整個實驗的效能指標數據源自每個 Kafka Broker 的 JMX 資訊,這些資訊透過 jmx_exporter 輸出成 Prometheus 能夠接受的格式, -接著以 Grafana 繪圖觀察。實驗過程中我們也有關心實際硬體資源的使用情況,這部分我們透過在每個硬體設備啟動的 node exporter 和 Prometheus, -進行底層硬體效能資料的攝取。 - -您可以使用專案內的 -[./docker/start_node_exporter.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_node_exporter.md), -[./docker/start_prometheus.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_prometheus.md) 和 -[./docker/start_grafana.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_grafana.md) 來建構監控環境。 +整個實驗的效能指標透過在每個硬體設備啟動的 node exporter 和 Prometheus進行底層硬體效能資料的攝取。詳細可以看 [./docker/start_node_exporter.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_node_exporter.md), [./docker/start_prometheus.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_prometheus.md) 和[./docker/start_grafana.sh](https://github.com/skiptests/astraea/blob/7596f590ae0f0ec370a6e257c10cc2aeb5fb5bf4/docs/run_grafana.md) 本次實驗所使用的 Dashboard 可以在[這裡](resources/experiment_1_grafana-1663659783116.json)找到