Kafka Connect Integration
我正在尝试使用 Kafka Connect 从 Oracle 数据库中提取数据。 Kafka 连接器提供的默认对象是 "GenericRecord" 类型。这使得它过于具体,并导致通过执行 record.getAsString("someIDENTIFIER") 来获取数据的情况。是否有可能获得特定类型的对象而不是 GenericRecord 类型。
Kafka Connect 源连接器使用
(同样,接收器连接器使用
听起来您正在编写一个 Kafka 消费者并且正在那里看到
但是,您可以将应用程序配置为了解特定版本的 Avro 架构,并让构建系统为该版本的 Avro 架构生成代码,以创建将反序列化 Avro 编码消息的特定代码转换为模式描述的内存形式。在 Java 中,这意味着您将从模式生成类,然后在代码中使用生成的类将
1 2 | GenericRecord genericEvent = (GenericRecord) messageAndMetadata.message(); LogLine event = (LogLine) SpecificData.get().deepCopy(LogLine.SCHEMA$, genericEvent); |
Avro 的一个显着优势是它直接支持模式演化,而 Confluent 的模式注册表利用了这一点。因此,尽管源连接器可能会演变为表生成的 Avro 模式以响应数据库中表结构的变化,但只要更改数据库模式以使 Avro 模式向后和/或向前兼容,您的客户端应用程序使用的 Avro 库将自动从消息的 Avro 架构转换为您的应用程序使用的 Avro 架构。
当然,在某些时候您会更改您的应用程序以使用新的 Avro 模式,但这不必同时进行。事实上,如果您将架构注册表配置为强制架构版本向前和向后兼容,您可以在更改数据库之前或之后更改您的客户端应用程序,并且 JDBC 源连接器开始使用新版本的 Avro 架构。