Use case je pullnout každou hodinu data z kafky, agregovat je, zapsat jinam a zdroj zahodit. A tak dokola.
Pattern zní mini-batching. Ie. batch job jednou za hodinu.
Pokud máš metrik jenom pár, bez žádného group by, streamneš to jedním loopem v několika paralelních procesech třeba v pythonu nebo javě a metriky za běhu sečteš pomocí hashmapy a na konci vyplivneš.
V tvým případě není problém spousta metrik (counters), ale počet dimenzí (metadata), kvůli kterým ti vzroste náročnost na paměť pro hashmapu, do kterých ukládáš mezivýsledky. Kardinalita dimenzí a metrik ti přímo určí, kolik paměti potřebuješ. Pronásob si kardinalitu všech dimenzí a metrik a když se ti to vejde do paměti, tak to akorát loopni skrz hashmapu a hotovo.
Pokud ne, dumpni všechny hodnoty za hodinu do csv souboru, seřaď vše podle dimenzí pomocí externího sort algoritmu (řazení mimo RAM), např. pomocí standardního GNU sort. Pak to loopni v javě podobně jako v prvním případě, ale vyhazuj položky z hashmapy tak, jak je navštěvuješ.