Как раскладывать события сервиса по топикам в кафке?
Может быть лучше делать гранулярные топики, и публиковать каждый тип в одном топике? Тогда у подписчиков полная свобода, они смогут гранулярно выбирать, на какие события подписываться. Но, правда, если консьюмер обрабатывает несколько типов событий и читает их из разных топиков, то гарантия порядка обработки событий теряется. Можно, конечно, сначала подчитывать события из разных топиков, сортировать их по метке времени, а потом уже обрабатывать... но и тут неприятный побочный эффект: пока мы собираем и сортируем события - увеличивается задержка.
Тогда может быть лучше складывать события в один топик? Так мы сможем гарантировать порядок событий, но, с другой стороны, если консьюмеру нужен только один тип событий, то он все равно вынужден просматривать все и выбирать нужные (вспоминается анекдот про сортировщика апельсинов).
К чему я все это. Выглядит так, что невозможно рационально принять решение о том, как стоит раскладывать события по топикам, находясь мыслями внутри продукта/сервиса. "Правильная" раскладка зависит от того, какие есть требования к пропускной способности, производительности, требованиям к КТС и т.п. системы в целом, от того, как система разбита на сервисы, сколько потребителей/консьюмеров событий и какие именно события они потребляют.
Т.е. структура топиков в микросервисной системе - это вопрос архитектуры не отдельных микросервисов, а системы, как целого.
Post #44
210
- 👍 2