flink程序在消费kafka数据时出现Error sending fetch request问题

5 篇文章 0 订阅

1. 问题背景

在程序已经稳定运行多天、未对代码做任何修改、查看所消费数据源未出现数据增多的情况下,有一个flink程序最近出现了积压问题,很是疑惑,观察几天并查看了日志发现,每当出现加压时便会伴随该日志出现,因此便着手解决该问题。
在这里插入图片描述

2. 解决问题

在网上搜索一番后,同时看了kafka配置方面的内容,就修改了如下两个配置
session.timeout.ms=30000增加至60000;
request.timeout.ms=20000增加至40000;
当时确实起作用了,不再出现积压,也不会再出现这样的日志,可是过了一段时间后又出现了积压并伴随该日志出现,于是又分别将上述量配置增加至80000和40000,但这次没像上次,重启程序后立刻出现该日志并且伴随数据积压。于是我又检查了下其他参数,发现我的max.poll.records=20000,但是默认值是500,于是又是在网上搜索一番,发现有博主说每条消息处理的时间t和一次拉取的记录数num和max.poll.interval=ms(默认300000ms)具有一定的关系,即:t*num<ms,否则就会被 Coordinator 剔除消息组然后重平衡,如果该说法合理的话,那就是说明我的max.poll.records设置的值太大,于是我把max.poll.records设置为10000,看看什么效果。

另外,最近一次出现严重的数据积压问题,分别查看了消费topic和生产topic的每秒曲线,在消费的topic数据量没有出现增加的情况下,发现生产topic的数据量极大的增加了,所以我很怀疑,也是因为上述的问题导致,消费后的数据又重新消费了,导致生产大量的重复数据。

1. 一次 kafka 消息堆积问题排查
2. Kafka几个常见的错误
3. Kafka stream 开发碰到的问题
4. Flink读取Kafka报Error sending fetch request

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以尝试回答你的问题。 要编写 Flink 程序消费 Kafka,您需要采用以下步骤: 1. 创建一个 Flink 流式处理作业,并配置适当的读取器和数据源。 2. 定义一个 Kafka 消费者,并配置适当的消费者参数。您可以使用 Flink 提供的 KafkaConsumer 类来实现这一步骤。 3. 编写处理逻辑,对消费数据进行相应的转换和操作。您可以使用 Flink 提供的函数和算子来实现这一步骤。 4. 将处理后的数据发送到下游,可以是另一个 Kafka 主题,也可以是一个数据库或其他外部系统。 以下是一个示例代码,可以作为您编写 Flink 程序消费 Kafka 的起点: ``` import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer010; import org.apache.flink.streaming.util.serialization.SimpleStringSchema; import org.apache.kafka.clients.consumer.KafkaConsumer; import java.util.Properties; public class KafkaConsumerFlink { public static void main(String[] args) throws Exception { // 设置执行环境 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 定义 Kafka 消费者配置 Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "test-group"); // 创建 Kafka 消费FlinkKafkaConsumer010<String> consumer = new FlinkKafkaConsumer010<>("test-topic", new SimpleStringSchema(), properties); // 将 Kafka 流绑定到 Flink 环境 env.addSource(consumer) .map(String::toUpperCase) // 将字符串转换为大写 .print(); // 打印处理结果 // 执行 Flink 程序 env.execute("Kafka Consumer Flink"); } } ``` 在这个示例中,我们使用 Flink 提供的 KafkaConsumer 类来创建一个消费者,并配置相关参数。随后,我们使用 addSource 方法将 Kafka 流绑定到 Flink 环境,并通过 map 算子将所有收到的字符串转换为大写。最后,我们使用 print 方法将处理结果打印出来。在执行环境中,我们使用 execute 方法启动 Flink 任务。 请注意,此示例代码只是一个示例,您需要根据您的实际需求进行适当的修改。在实际使用中,您还需要考虑如何进行故障处理、如何使用 Flink 的状态管理机制、如何进行批量处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值