繁体   English   中英

使用 apache Flink 读取键控 Kafka 记录?

[英]Read a keyed Kafka Record using apache Flink?

我正在使用 value + record kafka 生产者使用:

bin/kafka-console-producer.sh --topic test3 --property "parse.key=true" --property "key.separator=:" --bootstrap-server localhost:9092

但我发现很难理解如何使用 Flink kafka consumer KafkaSource读取这些 kafka 记录。 我希望能够做这样的事情:

record.getValue(), record.getKey(), record.getTimestamp()...

这是我当前的代码,它只从 kafka 读取非键控记录

        KafkaSource<String> source = KafkaSource.<String>builder()
            .setBootstrapServers(ip)
            .setTopics("test3")
            .setGroupId("1")
            .setStartingOffsets(OffsetsInitializer.earliest())
            .setDeserializer(KafkaRecordDeserializationSchema.valueOnly(StringDeserializer.class))
            .build();

    DataStream<String> stream = env.fromSource(source, WatermarkStrategy.noWatermarks(), "Kafka Source");
    stream.map((MapFunction<String, String>) value -> "Receiving from Kafka : " + value).print();

我能举个例子说明我在找什么吗?

您需要实施KafkaRecordDeserializationSchema (但不是 valueOnly),然后在其反序列化方法中您将有权访问 ConsumerRecord,并且您可以使用其键、值、标头等来生成您想要的任何类型。

Reading Apache Kafka® headers中有一个示例,它是 Immerok Apache Flink Cookbook 的一部分。 请注意,虽然该示例从记录的标头访问主题、分区、偏移量和时间戳,但它不使用键,该键可用作record.key()

注意:我为 Immerok 工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM