demo flink写入kafka_【开发案例】Flink案例:向Kafka生产并消费数据程序

本文介绍了如何使用Flink实现实时向Kafka发送和接收数据。首先,详细阐述了场景设置,包括版本信息、数据规划和集群安全认证配置。接着,提供了Kafka Topic的创建步骤,并探讨了三种安全认证方式:Kerberos、SSL及两者的结合。接下来,展示了Flink Java样例代码,包括Producer和Consumer的实现,以及如何根据不同安全模式调整运行参数。文章还提到了Scala版本的代码示例,以及如何通过命令行运行程序。最后,讨论了运行检查点、Pipeline和配置表与流JOIN的样例程序,以及查看调测结果的方法。
摘要由CSDN通过智能技术生成

Flink案例:向Kafka生产并消费数据程序

1.1场景说明

适用版本

FusionInsight HD V100R002C70、FusionInsight HD V100R002C80。

场景说明

假定某个Flink业务每秒就会收到1个消息记录。

基于某些业务要求,开发的Flink应用程序实现功能:实时输出带有前缀的消息内容。

数据规划

Flink样例工程的数据存储在Kafka组件中。向Kafka组件发送数据(需要有Kafka权限用户),并从Kafka组件接收数据。

1.确保集群安装完成,包括HDFS、Yarn、Flink和Kafka。

2.创建Topic。

a.在服务端配置用户创建topic的权限。

将Kafka的Broker配置参数“allow.everyone.if.no.acl.found”的值修改为“true”,如图1-1所示。配置完后重启Kafka服务。

图1-1 配置用户创建topic的权限

b.用户使用Linux命令行创建topic,执行命令前需要使用kinit命令进行人机认证,如:kinit flinkuser。

flinkuser需要用户自己创建,并拥有创建Kafka的topic权限。具体操作请参考《应用开发指南》(安全模式)的“准备开发用户”章节。

创建topic的命令格式:

bin/kafka-topics.sh --create --zookeeper

{zkQuorum}/kafka  --partitions {partitionNum} --replication-factor

{replicationNum} --topic {Topic}

表1-1 参数说明

参数名

说明{zkQuorum}

ZooKeeper集群信息,格式为IP:port。

{partitionNum}

topic的分区数。

{replicationNum}

topic中每个partition数据的副本数。

{Topic}

Topic名称。

示例:在Kafka的客户端路径下执行命令,此处以ZooKeeper集群的IP:port是10.96.101.32:24002,10.96.101.251:24002,10.96.101.177:24002,10.91.8.160:24002,Topic名称为topic1的数据为例。

bin/kafka-topics.sh --create --zookeeper

10.96.101.32:24002,10.96.101.251:24002,10.96.101.177:24002,10.91.8.160:24002/kafka

--partitions 5 --replication-factor 1 --topic topic1

3.安全认证。

安全认证的方式有三种:Kerberos认证、SSL加密认证和Kerberos+SSL模式认证,用户在使用的时候可任选其中一种方式进行认证。

−Kerberos认证配置

i.客户端配置。

在Flink配置文件“flink-conf.yaml”中,增加kerberos认证相关配置(主要在“contexts”项中增加“KafkaClient”),示例如下:

security.kerberos.login.keytab:

/home/demo/flink/release/flink-1.2.1/keytab/admin.keytab

security.kerberos.login.principal: admin

security.kerberos.login.contexts: Client,KafkaClient

security.kerberos.login.use-ticket-cache: false

ii.运行参数。

关于“SASL_PLAINTEXT”协议的运行参数示例如下:

--topic topic1 --bootstrap.servers

10.96.101.32:21007 --security.protocol SASL_PLAINTEXT

--sasl.kerberos.service.name kafka //10.96.101.32:21007表示kafka服务器的IP:port

−SSL加密配置

n服务端配置。

配置“ssl.mode.enable”为“true”,如图1-2所示:

图1-2 服务端配置

n客户端配置。

1)登录FusionInsight Manager系统,选择“服务管理 > 服务 > Kafka服务状态 > 服务状态 > 下载客户端”,下载客户端压缩文件到本地机器。如图1-3所示:

图1-3 客户端配置

2)使用客户端根目录中的“ca.crt”证书文件生成客户端的“truststore”。

执行命令如下:

keytool -noprompt -import -alias

myservercert -file ca.crt -keystore truststore.jks

命令执行结果查看:

3)运行参数。

“ssl.truststore.password”参数内容需要跟创建“truststore”时输入的密码保持一致,执行以下命令运行参数。

--topic topic1 --bootstrap.servers

10.96.101.32:21008 --security.protocol SSL --ssl.truststore.location

/home/zgd/software/FusionInsight_VXXXRXXXCXXUXX_Kafka_ClientConfig/truststore.jks

--ssl.truststore.password huawei //10.96.101.32:21008表示kafka服务器的IP:port,VXXXRXXXCXXUXX表示FusionInsight相应的版本号。

−Kerberos+SSL模式配置

完成上文中Kerberos和SSL各自的服务端和客户端配置后,只需要修改运行参数中的端口号和协议类型即可启动Kerberos+SSL模式。

--topic topic1 --bootstrap.servers

10.96.101.32:21009 --security.protocol SASL_SSL

--sasl.kerberos.service.name kafka --ssl.truststore.location

/home/zgd/software/FusionInsight_VXXXRXXXCXXUXX_Kafka_ClientConfig/truststore.jks

--ssl.truststore.password huawei //10.96.101.32:21009表示kafka服务器的IP:port,VXXXRXXXCXXUXX表示FusionInsight相应的版本号。

1.2开发思路

1.启动Flink Kafka Producer应用向Kafka发送数据。

2.启动Flink Kafka Consumer应用从Kafka接收数据,保证topic与producer一致。

3.在数据内容中增加前缀并进行打印。

1.3样例代码说明

JAVA样例代码

l功能介绍

在Flink应用中,调用flink-connector-kafka模块的接口,生产并消费数据。

l代码样例

用户在开发前需要使用对接安全模式的FusionInsight

Kafka,则需要引入FusionInsight的kafka-client-0.11.x.x.jar,该jar包可在FusionInsight client目录下获取。

下面列出producer和consumer主要逻辑代码作为演示。

完整代码参见com.huawei.bigdata.flink.examples.WriteIntoKafka和com.huawei.bigdata.flink.examples.ReadFromKafka

//producer代码

public class WriteIntoKafka {

public static void main(String[] args) throws

Exception {

// 打印出执行flink

run的参考命令

System.out.println("use command as:

");

System.out.println("./bin/flink run

--class com.huawei.bigdata.flink.examples.WriteIntoKafka" +

" /opt/test.jar

--topic topic-test -bootstrap.servers 10.91.8.218:21005");

System.out.println("./bin/flink run

--class com.huawei.bigdata.flink.examples.WriteIntoKafka" +

"

/opt/test.jar --topic topic-test -bootstrap.servers 10.91.8.218:21007

--security.protocol SASL_PLAINTEXT --sasl.kerberos.service.name kafka");

System.out.println("./bin/flink run

--class com.huawei.bigdata.flink.examples.WriteIntoKafka" +

"

/opt/test.jar --topic topic-test -bootstrap.servers 10.91.8.218:21008

--security.protocol SSL --ssl.trustst

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值