开发者社区> 问答> 正文

link 读取 Kafka多个 Partition问题是什么情况?

我的 Kafka cluster 有三个机器,topic 也分了三个 partition, 我用 Flink 读取 Kafka 消息的时候,感觉只从一个 partition 读取了东西, 一开始我的 bootstrap.servers 只写了一个地址,  现在改成了所有地址,也换了 group.id

Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "10.216.85.201:9092,10.216.77.170:9092,10.216.77.188:9092"); properties.setProperty("group.id", "behavior-logs-aggregator");

FlinkKafkaConsumer010 kafkaConsumer010 = new FlinkKafkaConsumer010 ("behavior-logs_dev", new BehaviorLogDeserializationSchema(), properties); kafkaConsumer010.setStartFromTimestamp(1585670400000L); //2020/04/01

处理完的数据,写到数据库里,看下了感觉少数据, 从 Log 里看到,也是。。,只有 partition=3, 没有 partiton=1,或者 2 的,

2020-04-02 14:54:58,532 INFO org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase - Consumer subtask 0 creating fetcher with offsets {KafkaTopicPartition{topic='behavior-logs_dev', partition=3}=38}.

是哪里有问题吗?*来自志愿者整理的FLINK邮件归档

展开
收起
玛丽莲梦嘉 2021-12-03 18:41:48 1391 0
1 条回答
写回答
取消 提交回答
  • 如果是要排查问题的话可以在消费 kafka 的时候通过 JSONKeyValueDeserializationSchema 来将数据的元数据(topic/parttion/offset)获取,这样可以排查你的数据到底来自哪些分区,这样你就不会再有困惑了。

    eg:

    env.addSource(new FlinkKafkaConsumer011<>( parameters.get("topic"), new JSONKeyValueDeserializationSchema(true), buildKafkaProps(parameters))) .flatMap(new FlatMapFunction<ObjectNode, ObjectNode>() { @Override public void flatMap(ObjectNode jsonNodes, Collector collector) throws Exception { System.out.println(jsonNodes.get("value")); System.out.println(jsonNodes.get("metadata").get("topic").asText());

    System.out.println(jsonNodes.get("metadata").get("offset").asText());

    System.out.println(jsonNodes.get("metadata").get("partition").asText()); collector.collect(jsonNodes); } }) .print();*来自志愿者整理的FLINK邮件归档

    2021-12-03 19:03:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第16讲】:Spring Boot 2.0 实战Apache Kafka百万级高并发消息中间件与原理解析 立即下载
MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
消息队列kafka介绍 立即下载