MapR融合数据平台上的Apache Flink入门

介绍

Apache Flink是用于分布式流和批处理数据处理的开源平台。 Flink是具有多个API的流数据流引擎,用于创建面向数据流的应用程序。

Flink应用程序通常使用Apache Kafka进行数据输入和输出。

本文将为您提供将Apache Flink与MapR Streams结合使用的简单步骤。 MapR Streams是用于大规模流式传输事件数据的分布式消息传递系统,它已基于Apache Kafka API(0.9.0)集成到MapR融合数据平台中

先决条件

创建您的Flink流项目

第一步是创建一个Java应用程序。 最简单的方法是使用flink-quickstart-java原型,其中包含核心依赖关系和打包任务。 本文类似于Apache Flink快速入门示例 ,其中重点明确介绍了MapR Streams的数据输入和输出。

在此应用程序中,我们将创建两个作业:

  • WriteToKafka :生成随机字符串,并使用Kafka Flink连接器及其Producer API将其发布到MapR Streams主题。
  • ReadFromKafka :读取相同的主题,并使用Kafka Flink连接器及其使用方在标准输出中输出消息。 API。

完整项目可在GitHub上找到:

让我们使用Apache Maven创建项目:

mvn archetype:generate \
      -DarchetypeGroupId=org.apache.flink\
      -DarchetypeArtifactId=flink-quickstart-java \
      -DarchetypeVersion=1.1.0 \
      -DgroupId=com.mapr.demos \
      -DartifactId=mapr-streams-flink-demo \
      -Dversion=1.0-SNAPSHOT \
      -DinteractiveMode=false

Maven将创建以下结构:

$ tree mapr-streams-flink-demo/
mapr-streams-flink-demo/
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── mapr
        │           └── demos
        │               ├── BatchJob.java
        │               ├── SocketTextStreamWordCount.java
        │               ├── StreamingJob.java
        │               └── WordCount.java
        └── resources
            └── log4j.properties

该项目配置为创建一个Jar文件,该文件包含您的Flink项目代码,还包括运行它所需的所有依赖关系。

该项目包含其他一些示例作业。 我们在本文中不需要它们,因此您可以出于教育目的保留它们,也可以将它们从项目中删除。

添加Kafka和MapR流依赖项

打开pom.xml并将以下依赖项添加到您的项目中:

1-添加MapR Maven存储库

<repositories>元素中添加:

<repository>
     <id>mapr-releases</id>
     <url>http://repository.mapr.com/maven/</url>
     <snapshots><enabled>false</enabled></snapshots>
     <releases><enabled>true</enabled></releases>
   </repository>

2-添加MapR Streams库

<dependencies>

<dependency>
   <groupId>com.mapr.streams</groupId>
   <artifactId>mapr-streams</artifactId>
   <version>5.2.0-mapr</version>
 </dependency>
 <dependency>
   <groupId>org.apache.kafka</groupId>
   <artifactId>kafka-clients</artifactId>
   <version>0.9.0.0-mapr-1602</version>
 </dependency>

3-添加Flink Kafka连接器库

第一步,我们必须添加Flink Kafka连接器作为依赖项,以便我们可以使用Kafka接收器。 将此添加到“依赖项”部分的pom.xml文件中:

您现在必须添加Flink Kafka Connector依赖项才能使用Kafka接收器。 在<dependencies>元素中添加以下条目:

<dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-connector-kafka-0.9_2.10</artifactId>
      <version>${flink.version}</version>
 </dependency>

4-排除Kafka客户端以允许使用MapR Streams客户端

如您所知,MapR Streams使用Kafka 0.9.0 API生成和使用消息。 因此,我们现在需要删除(排除)Apache Kafka Client API,以确保Flink可以使用MapR流。

在Flink Kafka Connector依赖项中,添加以下排除项:

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-kafka-0.9_2.10</artifactId>
    <version>${flink.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.kafka</groupId>
          <artifactId>kafka-clients</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.kafka</groupId>
          <artifactId>kafka_2.10</artifactId>
        </exclusion>
      </exclusions>
  </dependency>

现在,Flink项目已准备就绪,可以通过Kafka Connector使用DataStream,因此您可以从MapR Streams发送和接收消息。

现在,让我们在MapR中创建一个Stream并编写一些简单的Flink代码以使用它。

创建MapR流和主题

流是主题的集合,您可以通过以下方式将其作为一个组进行管理:

  1. 设置适用于该流中所有主题的安全策略
  2. 为流中创建的每个新主题设置默认的分区数
  3. 为流中每个主题中的消息设置生存时间

您可以在文档中找到有关MapR Streams概念的更多信息。

在您的Mapr群集或沙盒上,运行以下命令:

$ maprcli stream create -path /apps/application-stream -produceperm p -consumeperm p -topicperm p
$ maprcli stream topic create -path /apps/application-stream -topic flink-demo

安装和使用MapR Kafka实用程序

在您的集群上安装mapr-kafka软件包:

yum install mapr-kafka

打开两个终端窗口,并使用以下命令运行生产者和消费者Kafka实用程序:

制片人

/opt/mapr/kafka/kafka-0.9.0/bin/kafka-console-producer.sh --broker-list this.will.be.ignored:9092 --topic /apps/application-stream:flink-demo=

消费者

/opt/mapr/kafka/kafka-0.9.0/bin/kafka-console-consumer.sh --new-consumer --bootstrap-server this.will.be.ignored:9092 --topic /apps/application-stream:flink-demo

在生产者窗口中,您可以发布一些消息,并在消费者窗口中查看它们。 我们将使用这些工具来跟踪MapR Streams和Flink之间的交互。

编写您的Flink应用程序

现在,让我们使用Flink Kafka Connector将消息发送到MapR Streams并使用它们。

制片人

生产者使用SimpleStringGenerator()类生成消息,并将该字符串发送到/apps/application-stream:flink-demo主题。

public static void main(String[] args) throws Exception {
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

    Properties properties = new Properties();
    // properties.setProperty("bootstrap.servers", "<kafka-broker>:9092"); // not used by MapR Streams
    properties.setProperty("streams.buffer.max.time.ms", "200");

    DataStream<String> stream = env.addSource(new SimpleStringGenerator());
    stream.addSink(new FlinkKafkaProducer09<>("/apps/application-stream:flink-demo", new SimpleStringSchema(), properties));

    env.execute();
  }

SimpleStringGenerator()方法代码在此处可用。

主要步骤是:

  • 在任何Flink应用程序的基础上创建一个新的StreamExecutionEnvironment
  • 在应用程序环境中创建一个新的DataStream时, SimpleStringGenerator类实现了[SourceFunction](https://ci.apache.org/projects/flink/flink-docs-release-1.1/api/java/)的基本接口在Flink中流式传输数据源。
  • FlinkKafkaProducer09器添加到流中; 由于MapR Streams基于Kafka API 0.9,因此可以使用FlinkKafkaProducer09类; 有2个小差异:
    • 由于MapR Streams使用/opt/mapr/conf/mapr-clusters.conf类中定义的群集位置,因此不使用代理列表(第一个参数)。

消费者

使用者只需从/ apps / application-stream:flink-demo主题中读取消息,然后将它们打印到控制台中。

public static void main(String[] args) throws Exception {
    // create execution environment
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

    Properties properties = new Properties();
    // properties.setProperty("bootstrap.servers", "<kafka-broker>:9092"); // not used by MapR Streams
    properties.setProperty("group.id", "flink_consumer");

    DataStream<String> stream = env.addSource(new FlinkKafkaConsumer09<>(
        "/apps/application-stream:flink-demo", new SimpleStringSchema(), properties) );

    stream.rebalance().map(new MapFunction<String, String>() {
      private static final long serialVersionUID = -6867736771747690202L;

      @Override
      public String map(String value) throws Exception {
        return "Stream Value: " + value;
      }
    }).print();

    env.execute();
  }

主要步骤是:

  • 创建一个新的StreamExecutionEnvironment ,它是任何Flink应用程序的基础。
  • 使用消费者信息创建一组属性。 在此应用程序中,我们只能设置使用者group.id 。 请注意,MapR Streams不使用bootstrap.servers属性,因此无需进行设置。
  • 使用FlinkKafkaConsumer09从MapR Streams主题获取消息。 /apps/application-stream:flink-demo

生成并运行应用程序

让我们直接从Maven(或从您最喜欢的IDE)运行应用程序。

1-建立专案:

$ mvn clean package

2-运行Flink生产者作业

$ mvn exec:java -Dexec.mainClass=com.mapr.demos.WriteToKafka

3-运行Flink消费者工作

$ mvn exec:java -Dexec.mainClass=com.mapr.demos.ReadFromKafka

在终端中,您应该看到生产者生成的消息

现在,您可以在Flink群集上部署并执行此作业。

结论

在本文中,您学习了如何将Flink与MapR Streams结合使用来写入和读取数据流。 关键元素是Maven依赖项的配置,以将项目配置为使用MapR Streams库而不是Kafka库。

翻译自: https://www.javacodegeeks.com/2016/10/getting-started-apache-flink-mapr-converged-data-platform.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ficus FicusFicusFicus是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 是由索贝自主研发的一站式数据管理和应用平台,致力于解决大治 理过 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 程中面临的各类问题,如异构数据采集和存储、主管理计划编排自 定义、 接口管理定义、 接口管理定义、 接口管理定义、 接口管理定义、 接口管理定义、 接口管理定义、 接口管理定义、 接口管理BI 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 工具灵活性提升、运维设备监控等问题 。平台基于先进的 。平台基于先进的 。平台基于先进的 。平台基于先进的 。平台基于先进的 。平台基于先进的 。平台基于先进的 。平台基于先进的 KAPPA KAPPAKAPPAKAPPA架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 架构,将批计算与流式完美融合后台功能模块采用微服务的部署方 式,方便 式,方便 版本迭代时 版本迭代时 版本迭代时 功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效功能的可扩展性,平台接入了并 行计算处理力高效行处理海量数据 行处理海量数据 ,灵活的 ,灵活的 BI 工具决定了 工具决定了 工具决定了 Ficus FicusFicusFicus适用于多行业户的数据应, 适用于多行业户的数据应, 适用于多行业户的数据应, 适用于多行业户的数据应, 适用于多行业户的数据应, 适用于多行业户的数据应, 底层采用自主研发的融合数据库 底层采用自主研发的融合数据库 底层采用自主研发的融合数据库 底层采用自主研发的融合数据库 底层采用自主研发的融合数据库 VernoxVernox VernoxVernox,不仅高效支持中文检索,完全 不仅高效支持中文检索,完全 不仅高效支持中文检索,完全 不仅高效支持中文检索,完全 不仅高效支持中文检索,完全 自主研发 自主研发 自主研发 的特性 更是保证了底层数据安全和稳定的特性 更是保证了底层数据安全和稳定的特性 更是保证了底层数据安全和稳定的特性 更是保证了底层数据安全和稳定的特性 更是保证了底层数据安全和稳定的特性 更是保证了底层数据安全和稳定的特性 更是保证了底层数据安全和稳定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值