Хотелось бы узнать, как потоки Кафки назначаются разделам тем для чтения. Насколько я понимаю, каждый поток Kafka Stream является потребителем (и для потока существует одна группа потребителей). Таким образом, я предполагаю, что потребители случайным образом распределены между разделами.
Но как это работает, если у меня есть несколько тем ввода, к которым я хочу присоединиться?
Пример:
Topi c P содержит людей. У него есть два раздела. Ключ сообщения - это идентификатор человека, поэтому каждое сообщение, которое принадлежит человеку, всегда заканчивается в одном и том же разделе.
Topi c O содержит заказы. У него есть два раздела. Допустим, ключом является также идентификатор человека (человека, который что-то заказал). Поэтому и здесь каждое сообщение-заказ, принадлежащее человеку, всегда попадает в один и тот же раздел.
Теперь у меня есть поток, который читает обе темы и подсчитывает все заказы на человека и записывает его в другую топику. c (где в сообщении также указывается имя человека).
Данные в topi c P :
Раздел 1 : "hans, id=1"
, "maria, id=3"
Раздел 2 : "john, id=2"
Данные в topi c O :
Раздел 1 : "person-id=2, pizza"
, "person-id=3, cola"
Раздел 2 : "person-id=1, lasagne"
А теперь я запускаю два потока.
Тогда это может произойти:
Поток 1 назначается для topi c P раздела 1 и topi c O раздела 1 .
Поток 2 назначается для topi c P раздела 2 и topi c O раздела 2 .
Это означает, что ордер lasagne
для hans
никогда не получит счет d , потому что для этого поток должен потреблять topi c P раздел 1 и topi c O раздел 2 .
Так как справиться с этой проблемой? Я предполагаю, что довольно часто потоки должны каким-то образом обрабатывать данные, которые связаны друг с другом. Поэтому необходимо обеспечить, чтобы соответствующие данные (здесь: hans
и lasagne
) обрабатывались одним и тем же потоком.
Я знаю, что эта проблема не возникает, если есть только один поток или если темы имеют только один раздел. Но я хочу иметь возможность обрабатывать сообщения одновременно.
Спасибо