从Apache Flink中的Kafka经纪人处读取最新数据

时间:2017-08-23 18:18:17

标签: apache-kafka apache-flink kafka-producer-api flink-streaming flink-cep

我想收到从Kafka到Flink Program的最新数据,但Flink正在阅读历史数据。 我已将auto.offset.reset设置为latest,如下所示,但它不起作用

properties.setProperty("auto.offset.reset", "latest");

Flink Programm使用以下代码

从Kafka接收数据
//getting stream from Kafka and giving it assignTimestampsAndWatermarks

        DataStream<JoinedStreamEvent> raw_stream = envrionment.addSource(new FlinkKafkaConsumer09<JoinedStreamEvent>("test",
                new JoinSchema(), properties)).assignTimestampsAndWatermarks(new IngestionTimeExtractor<>());

我正在讨论 https://issues.apache.org/jira/browse/FLINK-4280,建议以下面提到的方式添加来源

Properties props = new Properties();
...

FlinkKafkaConsumer kafka = new FlinkKafkaConsumer("topic", schema, props);
kafka.setStartFromEarliest();
kafka.setStartFromLatest();
kafka.setEnableCommitOffsets(boolean); // if true, commits on checkpoint if checkpointing is enabled, otherwise, periodically.
kafka.setForwardMetrics(boolean);
...

env.addSource(kafka)

我做了同样的事情,但是,我无法访问setStartFromLatest()

 FlinkKafkaConsumer09 kafka = new FlinkKafkaConsumer09<JoinedStreamEvent>( "test", new JoinSchema(),properties);
  

我该怎么做才能收到发送到的最新值   卡夫卡而不是从历史中接受价值观?

2 个答案:

答案 0 :(得分:0)

通过为发件人和使用者创建名为group id的新test1并保持主题名称与test相同,解决了该问题。

  

现在我想知道,这是解决这个问题的最佳方法吗?因为   每次我需要提供一个新的组ID

     

有什么方法可以读取发送给Kafka的数据吗?

答案 1 :(得分:0)

我相信这对你有用。它对我有用。修改属性和kafka主题。

public static void main(String[] args) throws Exception {


        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();


        Properties properties = new Properties();
        properties.setProperty("bootstrap.servers", "ip:port");
        properties.setProperty("zookeeper.connect", "ip:port");
        properties.setProperty("group.id", "your-group-id");


        DataStream<String> stream = env
                .addSource(new FlinkKafkaConsumer09<>("your-topic", new SimpleStringSchema(), properties));



        stream.writeAsText("your-path", FileSystem.WriteMode.OVERWRITE)
            .setParallelism(1);

        env.execute();

    }