Kafka подключает значение чтения на основе ключа и записывает в HDFS

  1. Есть ли способ перенести только определенный тип события из темы kafka в HDFS, фильтруя остальные типы с помощью коннектора kafka connect HDFS?
  2. можем ли мы разделить входные события на основе некоторого ключа и записать в разные разделы. Чтобы значения конкретного ключа попадали в конкретный раздел?
  3. можем ли мы использовать ключи, хранящиеся в реестре схемы, для получения значений в теме, относящейся к конкретному ключу для данных формата avro? Пожалуйста, дайте мне знать, если мое понимание нуждается в ясности.

Если в Kafka connect нет этих функций, можно ли это реализовать с помощью потоков kafka? И, пожалуйста, помогите с некоторой документацией, если она доступна.


person BARATH    schedule 10.07.2018    source источник


Ответы (1)


Есть ли способ передать только определенный тип события из темы kafka в HDFS, фильтруя остальные типы с помощью коннектора kafka connect HDFS?

Kafka Connect имеет преобразования для управления сообщениями, но не предназначен для фильтрации. Обычно это делается с помощью Kafka Streams или KSQL.

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

Класс FieldPartitioner, упомянутый в документации Confluent, делает это (предупреждение: я считаю, что он работает только с полями верхнего уровня, а не с вложенными полями записей JSON или Avro)

можем ли мы использовать ключи, хранящиеся в реестре схемы, для получения значений в теме, относящейся к конкретному ключу для данных формата avro?

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

Данные Kafka не индексируются по ключу, они разделяются им, что означает, что если вы использовали DefaultPartioner, а не FieldPartitioner, то все ключи попали бы в один путь файловой системы разделом Kafka. Только тогда вы сможете делать запросы, но не по ключу, а по разделу. например с помощью Spark или Hive. Опять же, это поведение по умолчанию - вы можете использовать Transform, как упоминалось ранее, чтобы добавить ключ Kafka в данные, которые вы затем можете запросить по нему.

person OneCricketeer    schedule 11.07.2018
comment
Еще одно замечание: вы можете подумать о размещении разных типов событий в разных темах вместо того, чтобы иметь одну тему, которую вам нужно фильтровать. Вы можете подписаться на несколько тем с помощью коннектора, и эта стратегия может упростить ваш сценарий. - person dawsaw; 11.07.2018
comment
Предполагается, что существует несколько типов событий. Можно просто фильтровать по полям одного типа - person OneCricketeer; 11.07.2018
comment
Да, полностью, я думаю, что исходный пост предполагает, что в теме есть несколько типов, но, конечно, это зависит от сценария :) - person dawsaw; 11.07.2018
comment
Спасибо!! Можем ли мы использовать ключ в поле partition-er для разбиения на разделы на основе ключей? - person BARATH; 11.07.2018
comment
Если вы используете Transform для перемещения ключа в значение сообщения, это должно быть возможно. См. github.com/jcustenborder/kafka-connect-transform-archive - person OneCricketeer; 11.07.2018
comment
Спасибо вам!! эта опция выглядит нормально Transform, чтобы переместить ключ в значение сообщения, но все же возможно использовать преобразование ReplaceField: org.apache.kafka.connect.transforms.ReplaceField $ Key - для фильтрации значений на основе ключей? docs.confluent.io/current/connect/transforms/ - person BARATH; 11.07.2018
comment
@ crickey_007 есть ли другой способ, который можно использовать для отмены поведения по умолчанию kafka connect для записи ключа и значения в файл HDFS для записи evrey, что-то вроде этого свойства --property print.key = true - person BARATH; 25.07.2018
comment
Connect должен записать объект SinkRecord. SinkRecord имеет только одно значение. Это преобразование архива необходимо, чтобы переместить ключ в одно значение объекта SinkRecord. После этого преобразования вы можете изменить структуру значения, как хотите. К сообщениям можно применять множественные преобразования. - person OneCricketeer; 25.07.2018