Matchmaking is matching demand, with the right supply to facilitate a good transaction, i.e. a person wanting a taxi with one going in that direction, or the right team in a game.
With some worked examples, we’ll walk through ingesting data, capturing user intent, and building real-time analytics pipelines with Apache Kafka & Apache Flink and Clickhouse. Then we’ll see how we can blend that with transactional data to drive user actions while handling real world problems such as flaky users, sudden traffic jams, or losing WiFi.
One of few universal truths is that people prefer not to wait. Whether they’re looking for a game to play, the next episode to watch, a taxi home, or even a date, there is a finite amount of time you can delay a user before they will leave your service. However if the match is not good enough, that can actually be worse.
You don’t want to match someone in London with a taxi in Tokyo, or a new player against a world champion. Also, history can be important–trying to book a taxi to travel outside its normal working area will not be popular.
Good matches rely on many factors, some being hard constraints, and others which are weighted scores. Some of these can vary in real time. You don’t match someone in London with a taxi driver in Tokyo or a new player against the world champion. In addition, you’ll want to know what a user has done in the past so you can inform that match with past behaviors like balancing a team for a game, or matching people based on likely first date locations.
So lets explore streaming joins, Batch pre-aggregation, and dealing with rage quits in an open source architecture designed to scale out across the globe.