2016-02-29 3 views
9

Есть ли элегантный способ запросить тему Кафки для конкретной записи? REST API, который я создаю, получает идентификатор и должен искать записи, связанные с этим идентификатором, в теме Kafka. Один из подходов - проверить каждую запись в теме через пользовательский потребитель и искать совпадение, но я бы хотел избежать накладных расходов на чтение кучи записей. Имеет ли Kafka быструю встроенную фильтрацию?Query Тема Кафки для конкретной записи

+3

Как Крис отмечает, Kafka предоставляет некоторый механизм для извлечения отдельных записей. Но я бы предостерег, что это не то, что Кафка в первую очередь предназначен для http://kafka.apache.org/documentation.html#uses. Если вы используете Kafka прежде всего для извлечения отдельных сообщений из темы, использование другого программного обеспечения может лучше соответствовать вашему варианту использования. – morganw09dev

+1

Да, я решил внедрить потребителя Kafka, который пишет в базу данных Mongo, а затем мой REST API может запросить отдельные записи оттуда. Я проголосовал за ответ Криса, потому что он подтвердил мое подозрение, что это невозможно (по крайней мере, изящно). – user554481

ответ

7

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

Итак, если вы сделаете идентификатор из раздела и смещения, вы можете реализовать свой быстрый запрос. В противном случае, не так много. Это означает, что идентификатор объекта не является частью вашей модели данных, а скорее генерируется кодом Kafka-knowledgable.

Возможно, это работает для вас, может быть, нет.

+0

[Метод, который возвращает будущее] (https://kafka.apache.org/0101/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html#send (org.apache.kafka.clients.producer.ProducerRecord)) содержащий раздел и смещение – ruhong

1

Это может быть поздно для вас, но это поможет в том, как другие увидеть этот вопрос, теперь есть KSQL, Кафка SQL является открытым исходным кодом потокового SQL двигатель

https://github.com/confluentinc/ksql/

+0

AFAIK Kafka Streams делает фильтрацию на стороне клиента, а не на брокере. Таким образом, вы все еще извлекаете все данные по сети. –

+0

Да, вы правы @ Сергий Коструков –

Смежные вопросы