Kafka Streams номер темы
Я новичок в Kafka Streams, меня сейчас смущает максимальный параллелизм приложения Kafka Streams. Я прошел по следующей ссылке и не получил ответ, что я пытаюсь найти. https://docs.confluent.io/current/streams/faq.html
Если у меня есть 2 входных темы, одна из них имеет 10 разделов, а другая - 5 разделов, и только один экземпляр приложения Kafka Streams работает для обработки этих двух входных тем, какой максимальный номер потока я могу иметь в этом случае? 10 или 15?
2 ответа
Если у меня есть 2 входные темы, одна имеет 10 разделов, а другая имеет 5 разделов
Звучит хорошо. Итак, у вас всего 15 разделов. Предположим, у вас есть простая топология процессора, без объединений и агрегаций, так что все 15 разделов просто преобразуются без сохранения состояния.
Затем каждый из 15 входных разделов будет сопоставлен с одной "задачей" Kafka Streams. Если у вас есть 1 поток, входные данные из этих 15 задач будут обрабатываться этим 1 потоком. Если у вас 15 потоков, каждая задача будет иметь отдельный поток для обработки своего ввода. Таким образом, вы можете запустить 1 приложение с 15 потоками или 15 приложений с 1 потоком, и это логически похоже: вы обрабатываете 15 задач в 15 потоках. Единственное отличие состоит в том, что 15 приложений с одним потоком позволяют распределить нагрузку между JVM.
Аналогично, если вы запускаете 15 экземпляров приложения, каждый экземпляр с 1 потоком, то каждому приложению будет назначена 1 задача, и каждый 1 поток в каждом приложении будет обрабатывать свою заданную 1 задачу.
какое максимальное количество нитей я могу иметь в этом случае? 10 или 15?
Вы можете установить максимальное количество потоков на что угодно. Если количество потоков во всех задачах превышает общее количество задач, некоторые потоки останутся бездействующими.
Я рекомендую прочитать https://docs.confluent.io/current/streams/architecture.html, если вы еще этого не сделали. Кроме того, изучите журналы, которые ваше приложение создает при запуске. Каждый поток регистрирует назначенные ему задачи, например так:
[2018-01-04 16:45:26,859] INFO (org.apache.kafka.streams.processor.internals.StreamThread:351) stream-thread [entities-eb9c0a9b-ecad-48c1-b4e8-715dcf2afef3-StreamThread-3] partition assignment took 110 ms.
current active tasks: [0_0, 0_2, 1_2, 2_2, 3_2, 4_2, 5_2, 6_2, 7_2, 8_2, 9_2, 10_2, 11_2, 12_2, 13_2, 14_2]
current standby tasks: []
previous active tasks: []
Ответ Дмитрия не кажется полностью правильным.
Затем каждый из 15 входных разделов будет сопоставлен с одной "задачей" Kafka Streams.
Не в общем. Это зависит от "структуры" вашей топологии. Это также может быть только 10 задач.
В противном случае отличный ответ от Дмитрия!