Кафка выполняет балансировку разделов для каждого потока потребителя?

Вы можете скачать tika-app-xxx.jar (последний) из Здесь .

Затем поместите этот .jar-файл в ту же папку вашего файла сценария python.

затем вставьте следующий код в скрипт:

import os
import os.path

tika_dir=os.path.join(os.path.dirname(__file__),'.jar')

def extract_pdf(source_pdf:str,target_txt:str):
    os.system('java -jar '+tika_dir+' -t {} > {}'.format(source_pdf,target_txt))

Преимущество этого метода:

меньше зависимости. Один файл .jar проще управлять пакетом python.

поддержка нескольких форматов. Позиция source_pdf может быть каталогом любого документа. (.doc, .html, .odt и т. д.)

. tika-app.jar всегда выпускает ранее, чем соответствующая версия пакета tika python.

стабильный.

Недостаток:

Необходим jre-headless.

1
задан Tin Nguyen 30 January 2019 в 14:11
поделиться

2 ответа

Человек не должен иметь больше потребителя, чем перегородки. В противном случае порядок сообщений не может быть гарантирован, и способ хранения потребительского смещения не будет работать. Частично из-за этого производители / потребители Kafka (Java) не являются поточно-ориентированными.

Таким образом, в случае Кафки число разбиений - это ваш параллелизм.

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

0
ответ дан saabeilin 30 January 2019 в 14:11
поделиться

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

Из документации https://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#multithreaded :

1. Один потребитель на поток

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

  • PRO: Реализовать проще всего
  • PRO: Часто он самый быстрый, так как не требуется координация между потоками
  • PRO: очень легко реализовать обработку по порядку для каждого раздела (каждый поток просто обрабатывает сообщения в порядке их получения).
  • CON: Чем больше потребителей, тем больше TCP-соединений с кластером (по одному на поток). В общем, Kafka очень эффективно обрабатывает соединения, поэтому это, как правило, небольшая стоимость.
  • CON: множественные потребители означают, что на сервер отправляется больше запросов и немного меньше пакетных данных, что может вызвать некоторое снижение пропускной способности ввода / вывода.
  • CON: общее количество потоков во всех процессах будет ограничено общим количеством разделов.

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

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

0
ответ дан wardziniak 30 January 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: