我要试试在我的圈子里非常流行的Flink

Flink是什么?

Spark是一款令擅長使用的人心跳加速的分散处理软件。它与Apache是同一伙伴。

既然有人已经知道这个,对于他们来说可能觉得有点晚了,但既然最近才知道,也没办法。

这是我们的官方网站。
让你感到多么激动不离本网站。

shì .)
bù lí .)

flink_01.png

如果在“spark vs”上搜索,它已经排在第三位。

这个必须碰一下。

最后会形成什么?

通过Kafka传输某些内容,并将其传递给Elasticsearch的堆栈。

简单就是简单。

计划使用docker-compose来构建stack。
镜像将从Dockerfile创建。
虽然docker hub也有官方library,但我想了解一些它们的特点(请不要问我是什么特点)。

细节处理得很不错。

实践

首先,试用仅限于Flink。

试试看单独运行就是指试用本地 Flink 集群的意思。

用这种方式创建Docker镜像

FROM openjdk:8-jdk

ENV FLINK_VERSION=1.3.0 \
  FLINK_SCALA_VERSION=2.11 \
  FLINK_HADOOP_VERSION=27 \
  FLINK_HOME=/opt/flink
RUN apt-get update \
  && apt-get -y upgrade \
  && apt-get -y install \
       apt-transport-https \
       curl \
  && curl -OL http://ftp.tsukuba.wide.ad.jp/software/apache/flink/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-hadoop${FLINK_HADOOP_VERSION}-scala_${FLINK_SCALA_VERSION}.tgz \
  && tar fx flink-${FLINK_VERSION}-bin-hadoop${FLINK_HADOOP_VERSION}-scala_${FLINK_SCALA_VERSION}.tgz \
  && rm flink-${FLINK_VERSION}-bin-hadoop${FLINK_HADOOP_VERSION}-scala_${FLINK_SCALA_VERSION}.tgz \
  && mv flink-${FLINK_VERSION} ${FLINK_HOME}

COPY ./docker-entrypoint.sh /docker-entrypoint.sh

ENTRYPOINT /docker-entrypoint.sh

入口看起来大概是这个样子

#!/bin/bash

set -e

${FLINK_HOME}/bin/start-local.sh

tail -f /dev/null

用这种方式构建和执行

sudo docker build -t miyatama/flink:1.13.0 .
sudo docker run -it -p 8081:8081 miyatama/flink:1.13.0
flink_02.png

哇,真漂亮。

试试固定的字数限制。

无论是Spark还是Flink,分布式处理都喜欢WordCount。
不知道为什么,就是喜欢。

以下是”公式Example”的示例。

在QuickStart中

你可以在GitHub上找到这个SocketWindowWordCount示例的完整源代码,包括scala和java两种语言的版本。

找到了两个选项。虽然没有去查看它们有何不同,但我会使用QuickStart的那个选项。我会使用example的那个选项。
虽然说使用,但只是把flink-project克隆下来,替换src并进行构建而已。

我把Maven添加到之前的版本中进行构建和重新执行。
顺便再加一份酢豚。

FROM openjdk:8-jdk

ENV FLINK_VERSION=1.3.0 \
  FLINK_SCALA_VERSION=2.11 \
  FLINK_HADOOP_VERSION=27 \
  FLINK_HOME=/opt/flink \
  SBT_VERSION=0.13.15 \
  MAVEN_VERSION=3.5.0

RUN  apt-get update \
  && apt-get -y upgrade \
  && apt-get -y install \
       apt-transport-https \
       curl \
       git \
  && echo "deb https://dl.bintray.com/sbt/debian /" | tee -a /etc/apt/sources.list.d/sbt.list \
  && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823 \
  && apt-get update \
  && apt-get -y install \
       sbt=${SBT_VERSION} \
  && curl -OL http://ftp.tsukuba.wide.ad.jp/software/apache/flink/flink-${FLINK_VERSION}/flink-${FLINK_VERSION}-bin-hadoop${FLINK_HADOOP_VERSION}-scala_${FLINK_SCALA_VERSION}.tgz \
  && tar fx flink-${FLINK_VERSION}-bin-hadoop${FLINK_HADOOP_VERSION}-scala_${FLINK_SCALA_VERSION}.tgz \
  && rm flink-${FLINK_VERSION}-bin-hadoop${FLINK_HADOOP_VERSION}-scala_${FLINK_SCALA_VERSION}.tgz \
  && mv flink-${FLINK_VERSION} ${FLINK_HOME}  \
  && curl -OL http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && tar fx apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && rm -f apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && mv apache-maven-${MAVEN_VERSION} /opt/apache-maven-${MAVEN_VERSION}

ENV PATH=/opt/apache-maven-${MAVEN_VERSION}/bin:${PATH}

RUN mkdir /src \
  && cd /src \
  && git clone https://github.com/apache/flink.git \
  && cd ./flink/flink-quickstart/flink-quickstart-scala \
  && mvn package \
  && cd / \
  && git clone https://github.com/tillrohrmann/flink-project.git \
  && git clone https://github.com/apache/flink.git \
  && mv flink-project app \
  && rm -fr /app/src/main/scala/org/example/* \
  && \cp -f /flink/flink-examples/flink-examples-streaming/src/main/scala/org/apache/flink/streaming/scala/examples/socket/SocketWindowWordCount.scala /app/src/main/scala/org/example/SocketWindowWordCount.scala \
  && rm -fr /flink \
  && cd /app \
  && sed -i -e 's/"Flink Project"/"example"/g' build.sbt \
  && sed -i -e 's/0.1-SNAPSHOT/0.1/g' build.sbt \
  && sed -i -e 's/org.example.Job/org.example.SocketWindowWordCount/g' build.sbt \
  && sed -i -e 's/org.apache.flink.streaming.scala.examples.socket/org.example/g' /app/src/main/scala/org/example/SocketWindowWordCount.scala \
  && sbt assembly

COPY ./docker-entrypoint.sh /docker-entrypoint.sh

ENTRYPOINT /docker-entrypoint.sh

醋猪肉建造需要很长时间,所以最好用陀螺和咖啡之类的方式来打发时间。

如果不熟悉 Scala,不知道该如何构建是一点头绪都没有。
对于完全没有头绪的人,可以大致浏览一下这里。

向入口点添加
bash
+ $FLINK_HOME/bin/flink run /app/target/scala-2.11/example-assembly-0.1.jar –port 9000 –host localhost

CentOS 7的用户需要打开端口。关闭了firewalld的用户应该没有特别问题。

sudo firewall-cmd --permanent --zone=pulic --add-port=9000/tcp
sudo firewall-cmd --reload

进行执行并确认(省略构建步骤)

sudo docker run -it -p 8081:8081 -p 9000:9000 miyatama/flink:1.13.0
flink03.png
flink04.png

嗯,就是WordCount。

尽管甚至没有Kafka出场,但因篇幅较长,先暂停。

请提供以下参考资料。

    • Flink vs. Spark

 

    • Flink

 

    • sbt Reference

 

    maven installation
bannerAds