Я использую Kafka для развязки своих сервисов, но несколько секунд думаю о том, как сервисы потребляют и производят входы и выходы.
Если у меня есть сервис A, который получает данные от некоторого внешнегоиз-за неконтролируемого обслуживания я вынужден адаптироваться к формату данных (домену), предоставляемому внешней системой.Следуя такой практике, мой сервис A отправляет свои результаты в тему в своем собственном формате (домен).
Кстати, у меня есть сервис B, который делает то же самое, что сервис A, но использует какой-то другой внешний сервис,и имеет свой собственный формат данных (домен), который он выдвигает в отдельную тему.
Теперь семантика данных, создаваемых A и B, похожа, но не одинакова.Но следующим шагом в конвейере является служба C, которая должна потреблять как то, что производят A, так и B, что-то делать с ней и выплевывать результаты.
Если C знает, как использовать данные только из одного места,что подразумевало бы, что A & B (и любые другие в будущем) должны производить свои выходные данные в специфической для C области?Это означало бы, что если потребитель C когда-либо изменит свой домен, то A, B и любые другие производители должны будут измениться, что мне не нравится.Кроме того, если я добавлю другого потребителя, например, D, это означает, что A и B, используя эту аналогию, должны знать, что D также является их потребителем, что для меня ужасно.
Я думал, что Cдолжен нести ответственность за свои входные данные, то есть он зависит от моделей A и B (и любых других, которые могут создавать свои собственные данные).Это также подразумевает, что при добавлении нового источника C необходимо также изменить на эти данные.
По сути, я склоняюсь к компоненту ManySources-OneSink, а не к OneSource-ManySinks.
Есть ли предпочтительные практики?