KafkaStreams: количество задач и регулярное выражение для исходных тем - PullRequest
1 голос
/ 16 апреля 2020

Допустим, у нас есть приложение KafkaStreams, которое считывает данные из 2 исходных тем customerA.orders и customerB.orders. Каждая топи c имеет 3 раздела.

StreamsBuilder builder = new StreamsBuilder();
KStream stream1 = builder.stream("customerA.orders")
KStream stream2 = builder.stream("customerB.orders")
//Business logic which has stateless transformations.

Когда я запускаю это приложение, создается 6 задач, что ожидается (так как у нас есть 3 раздела для каждой топи c): текущие активные задачи: [0_0, 0_1, 1_0, 0_2, 1_1, 1_2]

Поскольку оба имени topi c оканчиваются на «.orders», я могу использовать регулярное выражение для чтения данных из исходных тем, как показано ниже

StreamsBuilder builder = new StreamsBuilder();
KStream stream1 = builder.stream(Pattern.compile(".*orders"))

Но когда я запускаю это приложение с помощью регулярных выражений, вместо 6 задач создаются только 3 задачи, хотя у нас есть 2 темы с 3 разделами в каждой: текущие активные задачи: [0_0, 0_1, 0_2]

* Приложение 1010 * streams получает сообщения из обеих тем.

Почему количество задач уменьшается, когда мы используем регулярное выражение для исходных тем?

1 Ответ

0 голосов
/ 16 апреля 2020
  1. В первом коде, если вы не применяете какие-либо операции, такие как объединение, или используете одно и то же хранилище состояний между двумя темами (точнее, между слишком большими кодами Stream DSL из двух KStreams), это создаст 2 под-топологии. , так что вы можете разделить задачу для каждого раздела topi c. Таким образом, эти 2 процесса топологии выполняются параллельно.
  2. Когда ваше приложение подписывает несколько тем в один KStream, оно создает одну и ту же задачу для разделов ввода topi c, имеющих одинаковый номер раздела, поэтому совместное разбиение (поэтому раздел 0 topi c 1 и раздел 0 topi c 2 используются одной и той же задачей), и одна конкретная задача обрабатывает только одно сообщение от одного из подписанных разделов-i за один раз.
...