Luis Fernandez
10/11/2022, 5:38 PMLuis Fernandez
10/11/2022, 5:40 PMLuis Fernandez
10/11/2022, 5:40 PMJohan Adami
10/11/2022, 5:57 PMLuis Fernandez
10/11/2022, 5:58 PMLuis Fernandez
10/11/2022, 5:58 PMLuis Fernandez
10/11/2022, 5:58 PMJohan Adami
10/11/2022, 5:58 PMtopic.consumption.rate.limit
from https://docs.pinot.apache.org/basics/data-import/pinot-stream-ingestion you can use. we’ve been meaning to experiment with this, but I can’t say for certain how well it works yetLuis Fernandez
10/11/2022, 5:58 PMLuis Fernandez
10/11/2022, 5:58 PMLuis Fernandez
10/11/2022, 5:59 PMJohan Adami
10/11/2022, 5:59 PMLuis Fernandez
10/11/2022, 6:00 PMLuis Fernandez
10/11/2022, 6:03 PMLuis Fernandez
10/11/2022, 6:03 PMJohan Adami
10/11/2022, 6:05 PMLuis Fernandez
10/11/2022, 6:06 PMLuis Fernandez
10/11/2022, 6:06 PMLuis Fernandez
10/11/2022, 6:06 PMrate(jvm_gc_collection_seconds_sum{ kubernetes_namespace="pinot", component="server"}[4m])
Luis Fernandez
10/11/2022, 6:07 PMLuis Fernandez
10/11/2022, 6:07 PMLuis Fernandez
10/11/2022, 6:07 PMJohan Adami
10/11/2022, 6:16 PMjvm_gc_collection_seconds_sum
sounds like seconds spent doing GC no? ~.3 sounds like 300ms which correlates with the p99 you’re seeingJohan Adami
10/11/2022, 6:17 PMLuis Fernandez
10/11/2022, 6:21 PMLuis Fernandez
10/11/2022, 6:21 PMRong R
10/11/2022, 10:24 PMtopic.consumption.rate.limit
is the right way for this use case. it works quite well.
• this is also a dynamic config - e.g. no need to reload or reset table for it to take effect. although it will not take effect until the next segment start consuming
• it doesn't limit rate on a server level. e.g. it doesn't enforce limit across all consumers within the same server.
• it only limits on a per partition level for lower-level consumerLuis Fernandez
02/02/2023, 9:51 PMtopic.consumption.rate.limit
like i know it’s a double but is it like message per second or something like that it should process? @Rong R @Johan AdamiJohan Adami
02/02/2023, 10:00 PMdouble topicRateLimit = streamConfig.getTopicConsumptionRateLimit().get();
double partitionRateLimit = topicRateLimit / partitionCount;
<http://LOGGER.info|LOGGER.info>("A consumption rate limiter is set up for topic {} in table {} with rate limit: {} "
+ "(topic rate limit: {}, partition count: {})", streamConfig.getTopicName(), tableName, partitionRateLimit,
topicRateLimit, partitionCount);
MetricEmitter metricEmitter = new MetricEmitter(serverMetrics, metricKeyName);
return new RateLimiterImpl(partitionRateLimit, metricEmitter);
It seems it naively assumes equal traffic per partition. so if you set 1000 as the limit on a topic with 10 partitions, each consumer will get 100 as the rate limitLuis Fernandez
02/02/2023, 10:01 PMJohan Adami
02/02/2023, 10:02 PMJohan Adami
02/02/2023, 10:02 PMLuis Fernandez
02/02/2023, 10:02 PMLuis Fernandez
02/03/2023, 8:00 PMLuis Fernandez
02/27/2023, 4:14 PMtopic.consumption.rate.limit
? are messages just queued up or dropped I think they get queued cause i think we just sleep right if we hit the rate limit?