Reme Ajayi
01/31/2023, 7:42 PMConfluentAvroRegistryDeserializationSchema.forSpecific . I am using the POJO generated from the avro-maven-plugin but it seems Flink does not understand the POJO.
org.apache.flink.client.program.ProgramInvocationException: The main method caused an error: Expecting type to be a PojoTypeInfo
at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:372)
at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:222)
at org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:98)
at org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:846)
at org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:240)
at org.apache.flink.client.cli.CliFrontend.parseAndRun(CliFrontend.java:1090)
at org.apache.flink.client.cli.CliFrontend.lambda$main$10(CliFrontend.java:1168)
at org.apache.flink.runtime.security.contexts.NoOpSecurityContext.runSecured(NoOpSecurityContext.java:28)
at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1168)
Caused by: java.lang.IllegalStateException: Expecting type to be a PojoTypeInfo
at org.apache.flink.formats.avro.typeutils.AvroTypeInfo.generateFieldsFromAvroSchema(AvroTypeInfo.java:72)
at org.apache.flink.formats.avro.typeutils.AvroTypeInfo.<init>(AvroTypeInfo.java:55)
at org.apache.flink.formats.avro.AvroDeserializationSchema.getProducedType(AvroDeserializationSchema.java:177)
at org.apache.flink.connector.kafka.source.reader.deserializer.KafkaValueOnlyDeserializationSchemaWrapper.getProducedType(KafkaValueOnlyDeserializationSchemaWrapper.java:56)
at org.apache.flink.connector.kafka.source.KafkaSource.getProducedType(KafkaSource.java:216)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.getTypeInfo(StreamExecutionEnvironment.java:2634)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.fromSource(StreamExecutionEnvironment.java:2006)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.fromSource(StreamExecutionEnvironment.java:1977)
at org.flink.test.DataStreamJob.main(DataStreamJob.java:73)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:355)
Does anyone have any ideas on how to fix this?sap1ens
01/31/2023, 7:49 PMReme Ajayi
01/31/2023, 8:07 PMMartijn Visser
02/01/2023, 8:31 AMReme Ajayi
02/01/2023, 6:22 PMPojoTypeInfo and serialized with the PojoSerializer (using Kryo as configurable fallback). The exception is when the POJOs are actually Avro types (Avro Specific Records) or produced as “Avro Reflect Types”. In that case the POJO’s are represented by an AvroTypeInfo and serialized with the AvroSerializer. You can also register your own custom serializer if required; see Serialization for further information."Reme Ajayi
02/01/2023, 6:31 PMKosta Sovaridis
02/01/2023, 6:42 PMReme Ajayi
02/01/2023, 6:45 PMavro-maven-plugin to my pom.xml and built the project. The schema files were avsc files. What did you mean by IDL?Kosta Sovaridis
02/01/2023, 6:47 PMKafkaSource.<Redacted>builder()
.setBootstrapServers(configuration.getBootstrap())
.setTopics(configuration.RedactedTopic())
.setGroupId(configuration.getGroupId())
.setStartingOffsets(OffsetsInitializer.earliest())
.setValueOnlyDeserializer(forSpecific(Redacted.class, configuration.getSchemaRegistryUrl()))
.build();
This is how I build my source and I made an avro protocol to generate my pojos which looks something like
protocol.advl
@namespace("my.cool.namespace")
protocol MyProtocol{
record Event {
string @javaAnnotation("jakarta.validation.constraints.NotNull") id;
@java-class("java.lang.Long")
long @javaAnnotation("jakarta.validation.constraints.NotNull") eventTimestamp;
@java-class("java.lang.Integer")
int @javaAnnotation([
"jakarta.validation.constraints.Min(0)",
"jakarta.validation.constraints.Max(999)",
"jakarta.validation.constraints.NotNull"])
redacted;
}
}Kosta Sovaridis
02/01/2023, 6:48 PMReme Ajayi
02/01/2023, 6:50 PMConfluentAvroRegistryDeserializationSchema ? My setup looks like this
KafkaSource<MyPOJO> history_ledger_source = KafkaSource.<MyPOJO>builder()
.setBootstrapServers("xxxx")
.setTopics("topic_name")
.setStartingOffsets(OffsetsInitializer.earliest())
.setGroupId("test-001")
.setProperty("security.protocol", "SASL_SSL")
.setProperty("sasl.mechanism", "PLAIN")
.setProperty("client.dns.lookup","use_all_dns_ips")
.setValueOnlyDeserializer(ConfluentRegistryAvroDeserializationSchema.forSpecific(MyPOJO.class ,registryUrl, registryConfig))
.build();Kosta Sovaridis
02/01/2023, 6:53 PMReme Ajayi
02/01/2023, 6:57 PMReme Ajayi
02/01/2023, 6:58 PMKosta Sovaridis
02/01/2023, 6:58 PMKosta Sovaridis
02/01/2023, 6:59 PMReme Ajayi
02/01/2023, 7:01 PMReme Ajayi
02/01/2023, 8:15 PMReme Ajayi
02/01/2023, 8:16 PMKosta Sovaridis
02/01/2023, 8:18 PMKosta Sovaridis
02/01/2023, 8:21 PMRodrigo Andrade
02/01/2023, 9:01 PMforSpecific()?
.setValueOnlyDeserializer(forSpecific(Redacted.class, configuration.getSchemaRegistryUrl()))
Kosta Sovaridis
02/02/2023, 8:38 AMReme Ajayi
02/03/2023, 3:00 PMavro-maven-plugin that did not have timestamps. And the addition of a timestamp field made them fail the test as well. I saw that there is an open issue you commented on where ConfluentAvroRegistryDeserializationSchema does not process logical types. Do you know about any solutions to this specific logical types issue?Reme Ajayi
02/03/2023, 3:05 PMavscMartijn Visser
02/07/2023, 1:59 PM