Каковы стратегии для совместного использования схемы Avro по нескольким темам или другим схемам? - PullRequest
1 голос
/ 04 октября 2019

Извините, если это уже описано в документации Кафки или в руководстве, и я был бы благодарен, если бы кто-то мог указать мне на это. Я нашел много документов и статей, которые охватывают основы использования Avro с Kafka и реестром схем, но я изо всех сил пытался найти стратегии или шаблоны для организации схем для использования в нескольких местах.

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

{
  "type": "record",
  "name": "Person",
  "fields": [
    {
      "name": "first_name",
      "type": "string"
    },
    {
      "name": "last_name",
      "type": "string"
    }
  ]
}

Вы хотите использовать эту схемув нескольких темах, таких как PeopleWithAccounts и PeopleWhoBoughtItemX и других темах. Вы также хотите использовать эту схему в другой схеме, например:

{
  "type": "record",
  "name": "Order",
  "fields": [
    {
      "name": "itemId",
      "type": "int"
    },
    {
      "name": "purchaser",
      "type": "Person"
    }
  ]
}

В этом сценарии было бы здорово иметь возможность определять схему Person независимо от темы, но при этом иметь схемукоторые используют темы в качестве своих предметов. Основываясь на документации Стратегии именования схем реестра , похоже, что клиенты могут быть настроены на использование тем или записей в качестве субъекта схемы во всех темах / схемах. Но в этом сценарии было бы неплохо иметь возможность устанавливать такую ​​конфигурацию для каждой схемы отдельно. Кроме того, в этой документации указывается, что KSQL, клиенты не-Java Kafka и другие инструменты работают только с TopicNameStrategy, что предполагает, что эту стратегию необходимо использовать для сообщений в темах, которые будут использоваться этими инструментами / клиентами.

Все это заставляет меня думать, что единственное разумное решение для "общей схемы" - это определение общих частей (например, типа Person) в каждой теме, в которой она используется. Похоже ли это на разумный вывод? ? Существуют ли инструменты, облегчающие определение «общей схемы» и включающие ее в другую схему?

tl; dr: Существуют ли какие-либо шаблоны / стратегии / рекомендации для организации схемы Avroкоторые будут использоваться несколькими темами как схема верхнего уровня этих тем или как поля внутри другой схемы?

...