Вы можете скачать 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.
Человек не должен иметь больше потребителя, чем перегородки. В противном случае порядок сообщений не может быть гарантирован, и способ хранения потребительского смещения не будет работать. Частично из-за этого производители / потребители Kafka (Java) не являются поточно-ориентированными.
Таким образом, в случае Кафки число разбиений - это ваш параллелизм.
Таким образом, в вашем сценарии, имея один раздел, запустите ровно одного потребителя с ровно одним экземпляром потребителя в одном потоке (вы можете, конечно, отправить сообщение для последующей обработки некоторым потокам в пуле)
Потребитель Kafka НЕ является поточно-ориентированным , вы не должны совместно использовать один и тот же экземпляр потребителя между разными потоками. Вместо этого вы должны создать новый экземпляр для каждого потока.
Из документации https://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#multithreaded :
1. Один потребитель на поток
Простой способ - дать каждому потоку свой собственный экземпляр клиента. Вот плюсы и минусы этого подхода:
blockquote>
- PRO: Реализовать проще всего
- PRO: Часто он самый быстрый, так как не требуется координация между потоками
- PRO: очень легко реализовать обработку по порядку для каждого раздела (каждый поток просто обрабатывает сообщения в порядке их получения).
- CON: Чем больше потребителей, тем больше TCP-соединений с кластером (по одному на поток). В общем, Kafka очень эффективно обрабатывает соединения, поэтому это, как правило, небольшая стоимость.
- CON: множественные потребители означают, что на сервер отправляется больше запросов и немного меньше пакетных данных, что может вызвать некоторое снижение пропускной способности ввода / вывода.
- CON: общее количество потоков во всех процессах будет ограничено общим количеством разделов.
Если тема имеет несколько разделов, сообщения из разных разделов могут обрабатываться параллельно. Вы можете создать несколько экземпляров-потребителей с одним и тем же group.id, и каждый из них получит подмножество разделов для потребления данных.
Kafka не поддерживает параллельную обработку по различным темам. Под этим я подразумеваю, что группы не управляются по разным темам, разделы из разных тем могут быть распределены неравномерно.