-
Notifications
You must be signed in to change notification settings - Fork 61
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
Changing rate statistics #1064
Changing rate statistics #1064
Conversation
Add new statistics: `SetDifference` Return current set. Return elements increased, removed, unchanged compared with last n recording.
這個概念蠻有趣的,不過如果我們討論“統計”的話,重點放在“數值”上的變化就好,”元素“的真實內容是可以不在意的,尤其像 consumer 的例子中,partitions真的測試下可能數百數千,這時候我們並不會真的去看“有哪些partitions",而是應該去看“數量變化而已",因此我會建議改成觀察下列項目:
|
app/src/main/java/org/astraea/app/performance/TrackerThread.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/app/performance/TrackerThread.java
Outdated
Show resolved
Hide resolved
common/src/main/java/org/astraea/common/metrics/stats/SetIncreased.java
Outdated
Show resolved
Hide resolved
instead of recording the current set. Record the number of partitions increase/decrease instead of record number of sticky/non-skicky partition.
app/src/main/java/org/astraea/app/performance/TrackerThread.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/app/performance/ConsumerThread.java
Outdated
Show resolved
Hide resolved
common/src/main/java/org/astraea/common/metrics/stats/WindowedRate.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@chinghongfang 感謝更新,大致看起來還不錯,麻煩接著處理後續的議題:
- 合併
AvgRateByTime
andAvg
- 更新 perf 文件,將 consumer 的更新寫上去
common/src/main/java/org/astraea/common/metrics/stats/AvgRateByTime.java
Outdated
Show resolved
Hide resolved
已經在 #1144 完成。
也順帶將其他過期文檔修正。 |
common/src/main/java/org/astraea/common/metrics/stats/WindowedRate.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/app/performance/TrackerThread.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/app/performance/TrackerThread.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/app/performance/ReportFormat.java
Outdated
Show resolved
Hide resolved
Split a long string into shorter strings. Remove redundant casting.
app/src/main/java/org/astraea/app/performance/TrackerThread.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/app/performance/ConsumerThread.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/app/performance/ConsumerThread.java
Outdated
Show resolved
Hide resolved
@chinghongfang 我覺得這個議題討論到有點歪掉了,我們試著從結果回頭看一下 ( @harryteng9527 也麻煩看一下,這關係到你的實驗),簡單來說,要做測試的話我們“至少”需要兩張圖:
就目前 perf 的指標來看,第一張圖無法畫出,因為我們只知道訂閱的partitions數量,但不知道其中是不是有變化,例如 consumer a 原本訂閱10個,負載平衡後也是10個,但我們不知道那10個是不是保持不變 |
現在這隻 PR 和原本一樣,紀錄了
請問 "變化" 是指 non-sticky 的數量嘛?如果是的話,現在有紀錄 rebalance 後,non-stikcy partition 的量。 |
目前看下來 @chinghongfang 是在 re-balance 時利用 listener 儲存 assigned、revoked 的 partitions,之後可以呼叫 static method 去計算 consumer instance re-balance 後的 non-sticky、sticky partition 的數量。 就我的想法,最終實驗所呈現的圖可能可以用下列的組合來說明:
而目前 @chinghongfang 已經在 listener 紀錄了 partitions ,這樣就能計算出
這邊的 partitions 變化量是指 sticky partitions 的數量變化嗎? 還是 re-balance 前後的 assignment 數量差異? |
這個部分可以由 @chinghongfang 提到的東西(下方)來完成,所以這部分我沒有疑問 現在 consumer 持有的 partition 量
這邊其實要講的故事叫做 "balance的成本“ ( 類似 @qoo332001 的題目),也就是為了讓 consumers 達到平衡,我們需要付出多少的成本?例如我們設計的 balancer 要執行多久?每次平衡的 partitions 變化量多大?會造成多少額外的延遲?會降低多少吞吐量?這些數字的優劣最好的呈現方式就是跟既有的 consumer policy 比較,這也是為何我先前會說實作來不及的話,拿既有的方法去做實驗也是一種貢獻,因為這些數據也很重要 @chinghongfang 如果已經有該些基本的數據了,那這隻PR還是應該要回頭把可以做成“趨勢”的統計做完,例如可以呈現近1/5/15分鐘的partitions變化 |
不好意思,先確認一下 "近1/5/15分鐘的partitions變化",是指 1/5/15 分鐘的平均值嘛? |
這個跟取樣的意思不太一樣,取樣是在實際無法觀察「全部」的值下的折衷辦法(通常是考慮效能問題),近 1/5/15分鐘這個則是用來反應「最近」的數字變化,另外它的平均概念上是逐漸「淡化」過去的值對變化的影響 |
是的,不過我要提醒1/5/15分鐘這種「平均」是已經將「時間」和「數字」揉合在一起,通常是用來快速讓讀者看一個數字而知道「趨勢」。相比之下,你也可以收集很多每次發生的變化,然後畫成折線圖再將時間軸壓縮一樣可以看到趨勢。 所以不要把兩者的用途混在一起,對於 perf tool 來說,我們每次在console上秀出來的數據都應該要具有上述的「趨勢」特性(例如我們會算好平均吞吐量而不是印出每次寫出去的資料量),這樣方便使用者快速觀察。 |
app/src/main/java/org/astraea/app/performance/TrackerThread.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@chinghongfang 大體上還不錯,我們稍微加速把這個項目合併
@harryteng9527 也要麻煩你日後用於實驗看是否能產生“值得觀察”的圖表
common/src/main/java/org/astraea/common/metrics/stats/Latest.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
#1024 (comment)
這隻 PR 實做了計算 "時間區間增減率" 的統計值。
創建時,使用者給予一時間區間 (e.g. 1 秒),接著,每次紀錄(
Stat#record()
)增減的數值 (e.g. +2.2 or -5.0),WindowedRate
的觀察結果會是增加量/過去總量
。以下舉個例子:假設我們設的時間區間是 2 時間單位在時間 0 時,沒有任何紀錄,沒有比率。
在時間 1 時,紀錄了 +10,統計值會回傳正無限大,因為過去的值是0,除以零在浮點數運算會回傳 正負無限大。
在時間 2 時,紀錄了 +5,統計值會回傳正無限大,相同原因。
在時間 3 時,統計值會回傳 0.5,代表和時間 1 相比,數值增加 0.5 倍。
在時間 4 時,紀錄了-5,統計值會回傳 -0.33,代表和時間 2 相比,數值減少 0.33 倍。
到時間 6 時,統計值會回傳 0.0,代表和時間 4 相比,數值沒有變化。
11/13 (updated)
另外,新增了新的統計類別,
WindowedRate
,每次紀錄 "新增" or "減少" 的值。回傳的觀測值將會是,和前段時間相比,增加的 "比率"。
比如說,假設觀測區間是 10 秒,且 10 秒前的值是 100,在這 10 秒內,增增減減總和是 +60 (現在的值是160),那麼觀測值就會回傳 60%。
另外,也把
ConsumerThread
修改成使用WindowedRate
來新增/減少的 partitions 數量。另外,新增了新的統計類別,SetDifference
,每次可以紀錄新增元素到集合從集合移除元素可以觀察的值有現在集合內的元素數量和前 n 次比,多出來的元素數量和前 n 次比,減少的元素數量和前 n 次比,沒變得元素數量