使用FlinkKafkaProducer / FlinkKafkaConsumer

时间:2016-04-27 21:39:22

标签: apache-kafka avro kafka-consumer-api apache-flink apache-beam

我在通过Beam通过FlinkKafkaProducer / FlinkKafkaConsumer读取/编写Avro数据时遇到了一些问题。

如果有人可以使用Avro架构(不使用融合版Kafka)指向FlinkKafkaProducerFlinkKafkaConsumer的工作示例,那就太棒了

A)BeamKafkaFlinkAvroProducerTest(制片人)

如果我直接使用KafkaProducer(即调用 produceSimpleData ),一切正常(仅用于测试)。使用FlinkKafkaProducer作为UnboundedSource(这是我应该做的) (即我通过以下步骤调用 produceAvroData2 ):

  1. 首先,如果我使用AvroSerializationSchema schema = new AvroSerializationSchema(Test.class);

    即。基本上使用Avro的org.apache.avro.specific.SpecificDatumWriter;我面临以下错误:

    Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.avro.generic.IndexedRecord
    at org.apache.avro.generic.GenericData.getField(GenericData.java:580)
    at org.apache.avro.generic.GenericData.getField(GenericData.java:595)
    at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:112)
    at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104)
    
  2. 接下来,如果我使用TypeInformationSerializationSchema(无论管道中的AvroCoder如何),显然工作正常,因为Kafka测试消费者工具会打印消息:

    java.lang.String{"uname": "Joe", "id": 6}
    
  3. B)BeamKafkaFlinkAvroConsumerTest(消费者)

    我知道我们应该在使用者和制作者中使用TypeInformationSerializationSchema或者分别在Consumer和Producer中使用AvroDeserializationSchemaAvroSerializationSchema

    但是,无论使用AvroDeserializationSchema还是TypeInformationSerializationSchema,我都会遇到以下异常:

    Exception in thread "main" java.lang.NullPointerException: null value in entry: V=null
    at com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:33)
    at com.google.common.collect.SingletonImmutableBiMap.<init>(SingletonImmutableBiMap.java:39)
    at com.google.common.collect.ImmutableBiMap.of(ImmutableBiMap.java:49)
    at com.google.common.collect.ImmutableMap.of(ImmutableMap.java:70)
    at org.apache.beam.sdk.coders.CoderRegistry.getDefaultOutputCoder(CoderRegistry.java:221)
    

    可能遗漏了一些非常基本的东西。所有代码均为here

0 个答案:

没有答案