public class KafkaSream {

    public static void main(String[] args) {

        Map<String, Object> props = new HashMap<String, Object>();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "my-stream-processing-application");
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put("default.timestamp.extractor", WallclockTimestampExtractor.class);
props.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
props.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
StreamsConfig config = new StreamsConfig(props); KStreamBuilder builder = new KStreamBuilder();
//builder.stream("my-topic").mapValues(value -> value.toString()+"gyw").to("my-topics"); ProcessorSupplier p = new ProcessorSupplier() {
@Override
public Processor get() {
try {
return Factory.getProcessor();
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
} catch (IllegalAccessException e) {
e.printStackTrace();
return null;
} catch (InstantiationException e) {
e.printStackTrace();
return null;
} }
}; builder.addSource("SOURCE", "chinaws__contents")
// 添加第一个PROCESSOR,param1 定义一个processor名称,param2 processor实现类,param3 指定一个父名称
.addProcessor("PROCESS1", p , "SOURCE")
// 添加第二个PROCESSOR,param1 定义一个processor名称, param2 processor实现类,param3 指定一个父名称
.addProcessor("PROCESS2", MyProcessor2::new, "PROCESS1")
// 添加第三个PROCESSOR,param1 定义一个processor名称, param2 processor实现类,param3 指定一个父名称
// .addProcessor("PROCESS3", MyProcessorC::new, "PROCESS2") // 最后添加SINK位置,param1 定义一个sink名称,param2 指定一个输出TOPIC,param3 指定接收哪一个PROCESSOR的数据
.addSink("SINK1", "topicA", "PROCESS2");
//.addSink("SINK2", "topicB", "PROCESS2")
//.addSink("SINK3", "topicC", "PROCESS3"); KafkaStreams streams = new KafkaStreams(builder, config);
streams.start();
}
}
package com.bonc.kafka;

import org.apache.kafka.streams.processor.Processor;

public class Factory {

    public static Processor getProcessor() throws ClassNotFoundException, IllegalAccessException, InstantiationException {

        Class<?> processor = Class.forName("com.bonc.kafka.MyProcessor");

        Object o = processor.newInstance();

        return (Processor)o;
} }

方法二:

package com.bonc.kafka;

import org.apache.kafka.streams.processor.Processor;
import org.apache.kafka.streams.processor.ProcessorSupplier; public class SupplierFactory implements ProcessorSupplier { private String className; public SupplierFactory(String className){
this.className = className;
}
@Override
public Processor get() {
Class<?> processor = null;
Object o = null;
try {
processor = Class.forName(className);
o = processor.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (Processor)o;
}
}

添加拓扑:addProcessor("PROCESS1", new SupplierFactory("com.bonc.kafka.MyProcessor") , "SOURCE")
 

kafka stream 低级别的Processor API动态生成拓扑图的更多相关文章

  1. Python调用ansible API系列(四)动态生成hosts文件

    方法一:通过最原始的操作文件的方式 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 通过操作文件形式动态生成ansib ...

  2. Roslyn 编译器Api妙用:动态生成类并实现接口

    在上一篇文章中有讲到使用反射手写IL代码动态生成类并实现接口. 反射的妙用:C#通过反射动态生成类型继承接口并实现 有位网友推荐使用 Roslyn 去脚本化动态生成,今天这篇文章就主要讲怎么使用 Ro ...

  3. ArcGIS API For Javascript :如何动态生成 token 加载权限分配的地图服务?

    一.需求 项目中我们通常会遇到为外协团队.合作友商提供地图服务的需求,因此对地图服务的权限需要做出分配. 二.现状 主流的办法是用用户和角色来控制,通常使用代理方式和用户名密码的方式来实现. 三.思路 ...

  4. 流式处理的新贵 Kafka Stream - Kafka设计解析(七)

    原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/kafka_stream/ Kafka Stream背景 Ka ...

  5. Kafka设计解析(七)- Kafka Stream

    本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka Stream.接着介绍了Kafka Stream的整体架构,并行模型,状态存储,以 ...

  6. Kafka Stream

    Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature(当前:1.0.0-rc0,参见:https://github.com/apache/kafka/releas ...

  7. Kafka设计解析(七)Kafka Stream

    转载自 技术世界,原文链接 Kafka设计解析(七)- Kafka Stream 本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka ...

  8. 流式计算新贵Kafka Stream设计详解--转

    原文地址:https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653162822&idx=1&sn=8c4611436 ...

  9. 《Kafka Stream》调研:一种轻量级流计算模式

    原文链接:https://yq.aliyun.com/articles/58382 摘要: 流计算,已经有Storm.Spark,Samza,包括最近新起的Flink,Kafka为什么再自己做一套流计 ...

随机推荐

  1. JAVA格式化解析日期

  2. Oracle语句(一)之简单查询

    1.查询数据表的所有列: select * from 表名; 程序员正常用法:select 列名,列名... form 表名; 2.起别名: select 列名 [AS 别名],列名 别名...fro ...

  3. UIButtonType各个类型的解释:

    UIButtonType各个类型的解释: typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = , UIButtonTypeS ...

  4. iOS视频播放(AVFoundation)

    iOS视频播放(AVFoundation) 关于iOS平台的音视频处理,苹果官方提供了OC和swift接口的AVFoundation框架,可以进行各种音频播放和剪辑,底层实现使用了GPU加速,编解码效 ...

  5. es6 数组扩展方法

    1.扩展运算符 含义: 扩展运算符,三个点(...),将一个数组转为用逗号分隔的参数顺序. 例如: console.log([1,2,3]); console.log(...[1,2,3]);   结 ...

  6. H5输入框在输入信息的时候 页面会变形 并且在页面不变形的时候 键盘会遮挡 输入框的解决办法

    $(document).ready(function () { $('body').css({'height':$(window).height()})});//这行是解决输入框在输入信息弹出键盘后页 ...

  7. #leetcode刷题之路7- 整数反转

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321 示例 3:输入: 120输出: 21 #i ...

  8. restframework中的那些参数你知道吗?

    序列化是很重要的过程, 在构建数据结构的时候, 往往会出现很多意想不到的问题, 有一些参数你要用, 但是没有办法穿过来, 怎么办> 今天这篇博客就是写我之前的一个小项目中用restframewo ...

  9. Git简单配置ssh秘钥

    执行以下命令: git config --global user.name "demo" git config --global user.email "demo@dem ...

  10. 支付宝PC端的支付(PHP)

    现在的一个项目支付宝PC支付还是用的以前网关:https://mapi.alipay.com/gateway.do  (是支付宝 2012年7月13日的3.3版本) 所以现在要做下支付宝PC支付的升级 ...