-
Notifications
You must be signed in to change notification settings - Fork 107
Support external query layer #989
Comments
FWIW, i've been having some talks with the folks behind https://eng.uber.com/m3/ to see how we can collaborate and save effort, and the main thing i've noticed so far is the m3 coordinator. a few interesting points about it:
they're heavily working on refactoring code and cleaning stuff up, but they told me they would keep me in the loop and let me know when it's ready for us to dig into it and attempt a proof of concept. I think 1 is the most interesting for us. we would need to confirm that it indeed leads us to significantly reduced memory footprint. if it does, that could be the "query engine 2.0" so to speak for MT. so it seems that there will be a need for client participants (non-data hosting) anyway, regardless of which query engine we put in front of MT |
I really like the idea of having dedicated query nodes. I dont think this would be hard to achieve. I think all we need to do is
|
I agree we can move forward with a minimal change like woodsaj describes above, though:
this will be beneficial to our deployments as well. |
This might even lead to significant resource usage optimisations. If nodes consuming data are less likely to crash , we may be able to transition from 2x readers and 1x writer to 1x reader and 1x writer (and both would be queried by query nodes) |
Status update: We deployed the query later using the 9999 partition hack described above. We did not see reduced avg memory/allocation on the read nodes, but we saw a full reduction on heap spikes and OOMkills. At ~50 render reqs/s we used to see 30-50 OOMkills / day, now we get zero for the read nodes and just 1 or 2 for the query nodes (which are almost instantly back in action). |
Tried to do same trick with client nodes, i.e. adding node serving partition 99999, but got error instead
@shanson7 : did you patch your MT for avoiding this? |
@deniszh - You need to use the carbon input plugin, not kafka-mdm. |
To accommodate this, and also fix #1013 in the process, I see 2 options: A come up with 3 names for different cluster modes
my suggestions for each. each is in order of my preference.
in this case, we should validate that input is enabled/disabled if mode is 1/2 or 3 respectively. B split it up
I think I have a small preference for A because it is more explicit and has room to add more modes later if needed. |
I think this can be inferred from |
With Metrictanks distributed design, the benefit from handling requests locally diminishes as the number of shard groups grows. With 100 shard groups, a single instance only handles ~1% of the data.
However, it has the overhead of needing to accumulate all of the data into a single node and execute the functions. Stack this onto the load of ingesting data and bookkeeping and a bad query can contribute to issues with ingestion.
Pros:
Cons:
Currently, this can be achieved by adding a set of nodes with a bogus partition (99999 or something), but that means that peer queries will still be issued to them resulting in a bit of noise.
Given that there is an effective workaround for this, I am entering this issue mostly for discussion.
The text was updated successfully, but these errors were encountered: