-
Notifications
You must be signed in to change notification settings - Fork 62
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
Statistic on gauge #1024
Statistic on gauge #1024
Conversation
我們可能要先去看現在最可能的幾個用法: 這隻PR改進我們收集 beans 的方法後,如何幫使用者將
因此,麻煩你先就上述兩個例子給予一些想法(或是就這隻PR給一些範例),然後我們再來看看程式碼本身 |
這邊的變化率是要計算哪種? 例如:
如何取得 revoked、assigned partitions可以利用 如何取得 consumer instance 被分配的 partition 數量
|
這幾個都是不錯的例子,不管是哪一個,我的想像是透過這支PR 提供的統計功能,我們可以輕鬆獲得例如從開始到現在的變化率、或是最近一段時間的變化率等等 |
這邊聽起來像是要把統計放在 所以現在要考慮的是,"要如何讓
感謝提供例子,我想這些都是可以新增的功能,不過看起來這些數據的紀錄時間會更分散 (可能有做 rebalance 時才會紀錄) ,所以可能要定義一下該統計值的意義,比如說如果我有 "一段時間" 沒有紀錄(or rebalance) 那回傳的 "數量差異" 該是 1) 上一次的差,還是 2) "0 沒有差異" 。
使用者可以如此使用 var topicSizeSensor = new SensorBuilder<Double>().add("rate", new RateByTime(Duration.ofSeconds(1))).build();
while (true){
// Fetch raw data
var beanObjects = receiver.current();
// Get value from benaObjects
// Double value = beanObjects.stream().filter( ...
topicSizeSensor.record(value);
var statistics = topicSizeSensor.measure("rate");
/****** Make use of statistics... ******/
} 比如說,每次我需要統計值時,我都會先去抓最新的數據,那麼我就把最新的數據丟進 以 2. 舉例,假設已經做好 var assignedSensor = new SensorBuilder<Integer>().add("difference", new Difference());
new ConsumerRebalanceListener{
@Override
void onPartitionAssigned(Set<TopicPartition> partitions){
assignedSensor.record(partitions.size());
}
};
// Put listener to consumer
var statistics = assignedSensor.measure("difference");
/****** Make use of statistics ******/ |
我建議一開始要“統計”哪些東西不用讓使用者決定,可以先選幾個常用的統計就好,例如單位時間內的變化就好。
@chinghongfang 這邊給的範例已經可以使用了嗎?還是需要等這隻PR? |
要等這隻 PR, |
@chinghongfang 可否隨後發一隻PR來增加我們觀察 consumer 的指標? https://github.com/skiptests/astraea/blob/main/app/src/main/java/org/astraea/app/performance/TrackerThread.java#L156 |
common/src/main/java/org/astraea/common/metrics/stats/RangedDataCalculator.java
Outdated
Show resolved
Hide resolved
common/src/main/java/org/astraea/common/metrics/stats/OnceByPeriod.java
Outdated
Show resolved
Hide resolved
common/src/main/java/org/astraea/common/metrics/stats/Debounce.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!
#623 (comment)
有些數據不適合 "對每一次紀錄都做統計"。這裡的作法是間隔段時間才紀錄數據,可以用來紀錄 "觀測值" 的速率。
比如說,我們一秒鐘會觀測數次 "topic size" ,所以計算速率的方法是 "間隔一秒才紀錄新數據,算差值"。
這裡解釋
RangedDataCalculator
的想法:這個方法是為了 "不對每一次紀錄都做統計",原因如上,觀測的頻率不固定,如果對每一次的觀測值統計 (例:對每一次觀測統計平均),那麼觀測頻率較高的時段將會有較高的比重。因此,想讓Stat
在紀錄前,先檢查是否要將這次的數據納入計算,或者是在某一時間區間的數據中取一個代表值 (例:平均、中位數等,弭平觀測誤差)。以上是我想到的問題與解法,應該還有我沒有考慮到的,還請不吝賜教。