Kafka Consumer последовательный или параллельный?

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

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

StuartLC 12.02.2019 14:58
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Apache Kafka - популярная платформа распределенной потоковой передачи данных, которую можно использовать для построения конвейеров данных в реальном...
0
1
1 172
2

Ответы 2

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

Потребители и производители будут собирать сообщения и обрабатывать их по частям.

Another side Kafka consumer consumes data from the topic and performs business logic. and persists into the database.

Я предлагаю не использовать для этого обычного потребителя. Изучите Kafka Connect и проверьте, поддерживается ли ваша база данных.

Как упоминалось в предыдущих ответах, вы можете использовать несколько разделов. Другой вариант: вы получаете преимущество потоковой передачи (Threadpoolexecutor), поэтому следующее будет выглядеть так: получить сообщение -> создать параллельный поток для выполнения необходимой логики -> сообщение подтверждения. Убедитесь, что производительность приложения регулируется (с помощью исполнителей пула потоков).

На самом деле, что происходит, когда предприятие входит в систему и загружает данные, это приложение Spring получает загруженные данные, а производитель Kafka отправляет данные в тему, а другой сторонний потребитель берет данные и обрабатывает их. учтите, что время, необходимое для обработки данных через производителя Kafka, потребителя Kafka и сохранения в базе данных, составляет 3 минуты. В среднем, в то время как другое предприятие появляется на картинке до завершения первого предприятия. второй корпоративный запрос ожидает завершения первого запроса. Здесь каждый корпоративный запрос, действующий по одной и той же теме, имеет несколько разделов.

kumar 13.02.2019 11:42

Вы можете создать несколько разделов в этой теме и использовать идентификатор предприятия в качестве ключа разделения при записи в Kafka, чтобы потребители могли работать параллельно и получать сообщения по порядку. Потребитель может обслуживать один или несколько разделов, но для достижения максимального параллелизма вы можете запускать одного потребителя на раздел. Какую базу данных вы используете для хранения этих данных? Когда вы пишете свой собственный потребитель, вам нужно будет сделать несколько вещей. обрабатывайте, например, перебалансировку, некоторое управление смещением, если у вас более строгая семантика доставки. Вы должны посмотреть на вариант подключения kafka, если он доступен, который имеет встроенный

rookie 14.02.2019 21:49

Другие вопросы по теме