Почему работает Kafka Connect?

#apache-kafka #apache-kafka-connect

#apache-kafka #apache-kafka-connect

Вопрос:

Я пытаюсь разобраться в том, как работает Kafka Connect, и не могу понять одну конкретную вещь.

Из того, что я прочитал и посмотрел, я понимаю, что Kafka Connect позволяет отправлять данные в Kafka с помощью соединителей источника и считывать данные из Kafka с помощью соединителей приемника. И самое замечательное в этом то, что Kafka Connect каким-то образом абстрагирует все зависящие от платформы вещи, и все, о чем вам нужно заботиться, — это наличие надлежащих соединителей. Например, вы можете использовать соединитель исходного кода PostgreSQL для записи в Kafka, а затем параллельно использовать соединители Elasticsearch и Neo4J Sink для чтения данных из Кафка.

Мой вопрос: как работает эта абстракция? Почему соединители источника и приемника, написанные разными людьми, могут работать вместе? Чтобы считывать данные из Kafka и записывать их куда угодно, вы должны ожидать некоторую фиксированную структуру / схему сообщений, верно? Например. как приемник Elasticsearch заранее знает, какие сообщения будут генерироваться источником PostgreSQL? Что, если я заменю исходный код PostgreSQL на исходный код MySQL? Будут ли созданные сообщения иметь одинаковую структуру?

Было бы логично предположить, что Kafka требует какой-то фиксированной структуры сообщений, но, согласно документации SourceRecord , которая отправляется в Kafka, не обязательно имеет фиксированную структуру:

…может иметь произвольную структуру и должна быть представлена с помощью org.apache.объекты kafka.connect.data (или примитивные значения). Например, соединитель базы данных может указывать sourcePartition как запись, содержащую { "db": "database_name", "table": "table_name"} и sourceOffset как длинную, содержащую временную метку строки «.

Комментарии:

1. x-post ответил здесь: forum.confluent.io/t/why-kafka-connect-works/700/3

Ответ №1:

Чтобы считывать данные из Kafka и записывать их куда угодно, вы должны ожидать некоторой фиксированной структуры / схемы сообщений, верно?

Вот именно. Обратитесь к Javadoc в классах Struct и Schema API Connect, а также к интерфейсу конвертера

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