кафка.
Нужно отправлять каждому консьюемеру один тип сообщения. Это сообщение нужно только одному косьюемеру из 1000, остальным оно бесполезно.
Как это лучше сделать?
1000+ топиков на каждый консьюмер
1 топик но 1000+ партиций
Или добиться того чтобы консьюмер вынимал из топика только нужное сообщение
Или вообще вместо кафки использовать что-то еще, например самописную шину
я б рекомендовал разные топики. иногда можно один входной + 1000 разных, по которым будет раскладывать прокладка (чтобы прилогу продюсер не учить саму раскладывать) потому что при 1 топике каждый из 1000 консьюмеров будет читать 1000 сообщений, а обрабатывать одно. нагрузка лишняя.
а что за прокладка?
например кафка-стримы, или самописная штука. в кратце - прилога, которая читает входной топик (от продюсера), и раскладывает сообщения по нужным выходным топикам. а уже их читают целевые консьюмеры. в итоге и соблюден single responsibility - продюсер не знает ничего о консьюмерах, а они - о продюсере и ненужных сообщениях.
прям 1000 консьюмеров? вы на это не влияете? мне кажется тут архитектура чет не очень, в первую очередь
ну на данном этапе это отдельные серваки/компы и им нужны события с главного сервака
именно по pull они должны забирать инфу?
нормальная, ситуация, имхо. пихать все 1000 политик в одну прилогу не обязательно. это уже не микросервисы
Про ресурсы мб надо подумать. Если написать одну консюмер группу, которая рассылает по рпс и ретраит через 30 сек в случае ошибок, то может даже проще получиться. А главное - дешевле.
я к тому, что тут вроде лучше push делать по потребителям, если это возможно
необработка сообщений для одного магазина не должна останавливать обработку сообщений для другого а значит один топик и диспетчер, который дергает консьюмеры - тупик
а если делим топик на партиции, один магазин одна пратиция
добавление партиций сложнее менеджить. + разные настройки хранения или размера для разных топиков - удобно. не надо писать алгоритм распределения по партициям, это выгодно, т.к. кастомное партиционирование (а ведь еще надо убериться что при добавлении добавили нужную партицию) это всегда не так удобно, как отдельный топик. если задача доставлять всегда разным консьюмерам
и тут магазинов стало не 1000, а 100_000)
кеш на каждую партицию все равно свой. так что оверхед почти такой же)) только еще геморрой с кастомным партиционированием и точка отказа при деплое нового магаза, когда чтобы добавить новый магаз надо трогать топик, который уже работает. а раз трогаем - значит можем поломать.
Обсуждают сегодня