调试flink源码

本文主要是讲讲flink的源码编译,案例运行,flink源码调试过程。调试flink的源码及案例,需要先clone工程,编一下源码,去掉规范检查,修改工程,最后才是调试运行。

1. clone工程

首先复制flink的github地址

git@github.com:apache/flink.git

接着在idea点击路径

File--->New--->Project from Version Control--->git

弹出窗口

把刚刚复制的flink的github地址粘贴到url输入栏,点击clone按钮,然后等待构建完成,工程有点大需要点时间。

工程clone完成之后,可以在idea 的右下角切换到自己所用的分支,我的分支是1.6.

切换完成之后,分支显示为:

2. 编译源码

源码编译可以直接用idea的maven插件。

报错如下:

修改一下根目录下的pom.xml文件

去掉代码风格检查,注释掉这个的主要原因是我们要改源码,不注释掉无法编译通过。

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>2.17</version>
          <dependencies>
            <dependency>
              <groupId>com.puppycrawl.tools</groupId>
              <artifactId>checkstyle</artifactId>
              <!-- Note: match version with docs/internals/ide_setup.md -->
              <version>8.4</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>validate</id>
              <phase>validate</phase>
              <goals>
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <suppressionsLocation>/tools/maven/suppressions.xml</suppressionsLocation>
            <includeTestSourceDirectory>true</includeTestSourceDirectory>
            <configLocation>/tools/maven/checkstyle.xml</configLocation>
            <logViolationsToConsole>true</logViolationsToConsole>
            <failOnViolation>true</failOnViolation>
          </configuration>
        </plugin>

再次编译,即可。

3. 运行kafka案例

点开工程栏,找到flink-examples模块,然后找到kafka案例,如下:

将kafka的example修改为可运行的案例,官方demo是通过打包提交到集群的方式运行,需要传参的,而我们直接在idea中运行,不需要穿参数。代码修改如下:

Properties props = new Properties();
    props.put("bootstrap.servers", "mt-mdh.local:9093");
    props.put("zookeeper.connect","localhost:2181");
    props.put("group.id","test");

    props.put("metadata.fetch.timeout.ms","10000");
    props.put("metadata.max.age.ms","30000");
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.getConfig().disableSysoutLogging();
    env.getConfig().setRestartStrategy(RestartStrategies.fixedDelayRestart(4, 10000));
    env.enableCheckpointing(5000); // create a checkpoint every 5 seconds
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

    DataStream<KafkaEvent> input = env
        .addSource(
          new FlinkKafkaConsumer010<>(
            "",
            new KafkaEventSchema(),
            props)
          .assignTimestampsAndWatermarks(new CustomWatermarkExtractor()))
        .keyBy("word")
        .map(new RollingAdditionMapper());

    input.addSink(
        new FlinkKafkaProducer010<>(
            "bar",
            new KafkaEventSchema(),
            props));

    env.execute("Kafka 0.10 Example");

然后,右键,run。发现,并不能顺心如意的运行,还是报了一堆错误。。。

实际上,只需要改一些run的运行配置即可避免该错误。

在导航栏,run---> Edit Configurations

修改为

再运行,就ok了。

关于debug,只要run运行成功之后,直接可以debug的。。。

flink的源码调试debug及阅读经验,敬请期待后续,文章,也可以点击原文阅读加入浪尖知识星球。

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2018-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

如何构建爬虫代理服务?

如何构建爬虫代理服务 专栏作者:Kaito 起因 做过爬虫的人应该都知道,抓的网站和数据多了,如果爬虫抓取速度过快,免不了触发网站的防爬机制,几乎用的同一招就是...

3369
来自专栏熊训德的专栏

Hbase Replicaition 在腾讯云中应用概述

Hbase 的 Repliation 是通过 Zookeeper 的协助,从 Master 集群异步往 Slave 集群写 WAL 实现的。可以实现典型的 Ma...

6905
来自专栏杨建荣的学习笔记

oracle监控工具ignite使用图解(r5笔记第78天)

对于oracle来说,在除了EM,Gridcontrol之外还有什么其它的监控工具呢,可能precise也是一个不错的选择,前几天在论坛中看到一个哥们简单回复了...

43713
来自专栏smartguys

(四):C++分布式实时应用框架——状态中心模块

  版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律追究的权利!

1565
来自专栏风中追风

分布式进阶__zookeeper的zab协议工作原理之原子广播

paxos协议主要就是如何保证在分布式环网络环境下,各个服务器如何达成一致最终保证数据的一致性问题

50215
来自专栏大数据和云计算技术

MongoDB系列10:Change Streams构建实时同步数据流

本文是第10篇,主要讲述Change Streams构建实时同步数据流的实战经验,非常值得一看。

2912
来自专栏全华班

springcloud学习手册-API Gateway (API网关)

导读 | API Gateway (API网关) ? 一、为什么服务之间需要使用API Gateway (API网关)呢? 引用「Chris Richardso...

3596
来自专栏小白安全

小白博客 迷你音乐播放器及实现全站pjax无刷新加载

演示截图: ? 请点击此处输入图片描述 ? 请点击此处输入图片描述 使用教程,下载播放器文件,直接上传压缩包至你的网站根目录,然后解压到根目...

4875
来自专栏BeJavaGod

fastdfs 图片服务器 使用java端作为客户端上传图片

之前有说道搭建fastdfs作为图片服务器,但是没有说明如何真正在代码里调用,那么今天大致讲一下,如何使用java客户端进行上传 首先你得要有一个客户端,导入到...

4234
来自专栏ytkah

织梦DEDECMS后台精简删除不需要的文件

如果是一开始就不想要的话,安装版plus目录下进行如下操作。 删除:guestbook文件夹【留言板,后面我们安装更合适的留言本插件】; 删除:task文件夹和...

5804

扫码关注云+社区