Кафка Потокового Параллелизма?

У меня есть базовый потоковый код Kafka, который читает записи из одной темы, выполняет некоторую обработку и выводит записи в другую тему.

Как Kafka streaming обрабатывает параллелизм? Все работает в одном потоке? Я не вижу этого в документации.

Если это однопоточный, я хотел бы, чтобы варианты многопоточного обработки для обработки больших объемов данных.

Если он многопоточный, мне нужно понять, как это работает и как обрабатывать ресурсы, например соединения с базой данных SQL, должны совместно использоваться в разных потоках обработки.

Не рекомендуется ли встроенный API потоковой передачи Кафки для сценариев большого объема относительно других опций (Spark, Akka, Samza, Storm и т. д.)?

2 ответов


как потоковая передача Kafka обрабатывает параллелизм? Все работает в одном потоке? Я не вижу этого в документации.

это подробно описано в http://docs.confluent.io/current/streams/architecture.html#parallelism-model. Я не хочу копировать-вставлять это здесь дословно, но я хочу подчеркнуть, что IMHO ключевым элементом для понимания является разделы (ср. МФ. Разделы темы Кафки, которые в Kafka Streams обобщается на "потоковые разделы", поскольку не все потоки данных, которые обрабатываются, будут проходить через Kafka), потому что раздел в настоящее время определяет параллелизм как Kafka (брокерская/серверная сторона), так и приложений обработки потоков, которые используют API Kafka Streams (клиентская сторона).

Если это однопоточный, я хотел бы, чтобы опции для многопоточной обработки обрабатывали большие объемы данных.

обработка раздел всегда будет выполняться только одним "потоком", что гарантирует, что вы не столкнетесь с проблемами параллелизма. Но...

если он многопоточный, мне нужно понять, как это работает и как обрабатывать ресурсы, например, соединения с базой данных SQL должны совместно использоваться в разных потоках обработки.

...поскольку Кафка позволяет теме иметь много разделов, вы получаете параллельную обработку. Например, если тема имеет 100 секций, затем до 100 потоковых задач (или несколько упрощенных: до 100 различных машин, на каждой из которых запущен экземпляр вашего приложения) могут обрабатывать эту тему параллельно. Опять же, каждая задача потока получит эксклюзивный доступ к 1 разделу, который затем будет обработан.

Не рекомендуется ли встроенный API потоковой передачи Кафки для сценариев большого объема относительно других опций (Spark, Akka, Samza, Storm и т. д.)?

механизм обработки потока Кафки определенно рекомендуемый, а также фактически используется на практике для больших нагрузок. Работа над сравнительным бенчмаркингом все еще ведется, но во многих случаях приложение на основе потоков Кафки оказывается быстрее. См.блог линейного инженера: применение потоков Кафки для внутреннего конвейера доставки сообщений для статьи LINE Corp, одной из крупнейших социальных платформ в Азии (220M+ пользователи), где они описывают, как они используют Kafka и Kafka Streams API в производство для обработки миллионов событий в секунду.


конфигурация kstreams num.поток.нити позволяет переопределить количество потоков от 1. Однако может быть предпочтительнее просто запустить несколько экземпляров вашего потокового приложения, причем все они работают в одной группе потребителей. Таким образом, вы можете создать столько экземпляров, сколько вам нужно, чтобы получить оптимальное разделение.