apache beam KafkaIO的使用(流处理IO)

目录:apache beam 个人使用经验总结目录和入门指导(Java)
这里我以下面这个为例,弄1个demo
在这里插入图片描述
第一步建立option和pipeline

        PipelineOptions kafkaOption = PipelineOptionsFactory.fromArgs(args).withoutStrictParsing().as(PipelineOptions.class);
        Pipeline pipeline = Pipeline.create(kafkaOption);

如何消费beamKafaTest主题里的数据

首先要建立1个kafkaRead对象

        KafkaIO.Read<String, String> kafkaRead =
                KafkaIO.<String, String>read()
                .withBootstrapServers("{bootip}")
                .withTopic("beamKafkaTest")
                .withKeyDeserializer(StringDeserializer.class)
                .withValueDeserializer(StringDeserializer.class);

boostrapServer的ip和端口视各自集群上的kafka配置而定
接着用apply进行组装,组装时要加上withoutMetaData作为最终的建立操作

PCollection<KV<String, String>> pKv = pipeline.apply(kafkaRead.withoutMetadata());

设置窗口

数据集里的KV<String,String>指的就是消费的kafkaRecord里的key和value,这里直接帮我们转成KV了

  • 我只需要里面的value整数值,因此需要把Key-Value转成Value。
  • 同时我们希望以每5秒作为1个窗口将结果进行收集,因此需要使用windows类进行组装
  • 同时要把5秒内的结果做个总和作为输出,要使用Sum这个类,并且要加上withoutDefaults,否则无法进行流处理。
        PCollection<Integer> pIntSum = pKv.apply(MapElements.via(new SimpleFunction<KV<String, String>, Integer>() {
            @Override
            public Integer apply(KV<String, String> input) {
                return Integer.valueOf(input.getValue());
            }
        }))
                .apply(Window.into(FixedWindows.of(Duration.standardSeconds(5))))
                .apply(Sum.integersGlobally().withoutDefaults());

生产消息到beamPrint主题

生产消息就比较简单了, 注意要先map成KV对象,才能使用KafkaIO.write

pIntSum.apply(MapElements.<Integer, KV<Integer, String>>via(new SimpleFunction<Integer, KV<Integer, String>>() {
            // v转kv
            @Override
            public KV<Integer, String> apply(Integer input) {
                return KV.of((input!=null?input:0), "answer=" + (input!=null?input:0));
            }
        }))
                .apply(KafkaIO.<Integer, String>write()
                        .withBootstrapServers("{bootip}")
                        .withTopic("beamPrint")
                        .withKeySerializer(IntegerSerializer.class)
                        .withValueSerializer(StringSerializer.class));

测试

启动beamDemo程序,然后用Kafka客户端脚本打开生产者和消费者。
5秒内在beamKafkaTest中输入1、2、3
在这里插入图片描述
然后可在beamPrint中看到输出:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值