kafka+storm初探

storm+kafka实现多topic消费 前言 在使用storm框架消费kafka数据时,之前一直是使用storm-kafka.jar中的KafkaSpout实现的,其局限性在于一次只能传入一个topic(public SpoutConfig(BrokerHosts hosts,String topic,String zkRoot,String id)。当消费多个topic时,需要实例化多个KafkaSpout。那么是否有其他方法可以一... 阅读详情

由于接触kafka和storm的时间不长,本文只是备忘。

关于kafka和storm的介绍不多说,官网有详尽的介绍,这里就是kafka+storm的具体案例

storm是一个实时的流式处理,主要是来源(Spout)、线路(Topology)、流向(Bolt)。

一、从kafka中读取数据,在storm中处理。既然从kafka中读取数据,spout的具体实现肯定是kafka实现spout即KafkaSpout类,此类中肯定有kafka的配置信息。所以不难推断出其逻辑。。

public static void main(String[] args) throws InterruptedException, AlreadyAliveException, InvalidTopologyException {
		TopologyBuilder builder = new TopologyBuilder();
		builder.setSpout("ksSpout", new KafkaSpout(getSpoutConfig()), 1);
		builder.setBolt("myBolt", new BoltTest(), 1).shuffleGrouping("ksSpout");
		builder.setBolt("ksBolt", new mykafkaBolt(), 1).shuffleGrouping("myBolt");

		Config conf = new Config();
		conf.setDebug(true);
		conf.setMaxTaskParallelism(1);
		// conf.put(arg0, arg1);

		Map<String, String> map = new HashMap<String, String>();
		// 配置Kafka broker地址
		map.put("metadata.broker.list", "hadoop3:2181");
		// serializer.class为消息的序列化类
		map.put("serializer.class", "kafka.serializer.StringEncoder");
		conf.put(TridentKafkaState.KAFKA_BROKER_PROPERTIES, map);

		LocalCluster local = new LocalCluster();
		
		//StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
		local.submitTopology("kafkaStorm", conf, builder.createTopology());
		Thread.sleep(100000);
		local.shutdown();
	}

	public static SpoutConfig getSpoutConfig() {
		// 设置kafka的zookeeper集群
		BrokerHosts hosts = new ZkHosts("hadoop3:2181");
		// 配置Kafka订阅的Topic,以及zookeeper中数据节点目录和名字
		SpoutConfig conf = new SpoutConfig(hosts, "topic1_test", "/brokers","apooutID");
		// 在topology中设置spout
		conf.scheme = new SchemeAsMultiScheme(new MessageScheme());
		return conf;
	}

}

class MessageScheme implements Scheme {

	public List<Object> deserialize(byte[] ser) {
		try {
			String msg = new String(ser, "UTF-8");
			return new Values(msg+"");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}

	public Fields getOutputFields() {
		// TODO Auto-generated method stub
		return new Fields("msg");
	}
}

class BoltTest extends BaseBasicBolt{

	@Override
	public void execute(Tuple tuple, BasicOutputCollector collector) {
		String msg=tuple.getString(0);
		System.out.println(msg);
		collector.emit(new Values(msg));
		
	}

	@Override
	public void declareOutputFields(OutputFieldsDeclarer declarer) {
		declarer.declare(new Fields("msg"));
		
	}
	
}

二、写人kafka中,consumer消费。

public class TestStorm {

	public static void main(String[] args) throws Exception {
		TopologyBuilder builder = new TopologyBuilder();
		builder.setSpout("testSpout", new TestWordSpout(), 2);
		builder.setBolt("testBolt", new TestWordBolt(), 2).shuffleGrouping( "testSpout");
		
		KafkaBolt<String, String> kafkaBolt = new KafkaBolt<String, String>();
		kafkaBolt.withTopicSelector(new storm.kafka.bolt.selector.DefaultTopicSelector("topic1_test"))
		.withTupleToKafkaMapper(new FieldNameBasedTupleToKafkaMapper<String, String>());
		
		builder.setBolt("kafak",kafkaBolt , 1).shuffleGrouping( "testBolt");

		Config conf = new Config();
		conf.setDebug(true);
		conf.setMaxTaskParallelism(3);
		LocalCluster local = new LocalCluster();
		
		
		 //3. 设置kafka producer的配置
       Properties props = new Properties();
       props.put("metadata.broker.list", "hadoop3:2181");
       props.put("producer.type","async");
       props.put("request.required.acks", "0"); // 0 ,-1 ,1
       props.put("serializer.class", "kafka.serializer.StringEncoder");
       conf.put(TridentKafkaState.KAFKA_BROKER_PROPERTIES, props);
		
		local.submitTopology("testStorm", conf, builder.createTopology());
		Thread.sleep(100000);
		local.shutdown();
	}
}

class TestWordSpout extends BaseRichSpout {
	/**
	 * 
	 */
	private static final long serialVersionUID = -5375148193042273211L;

	private SpoutOutputCollector collector;
	private static String[] info = new String[] {
			"comaple\t,12424,44w46,654,12424,44w46,654,",
			"lisi\t,435435,6537,12424,44w46,654,",
			"lipeng\t,45735,6757,12424,44w46,654,",
			"hujintao\t,45735,6757,12424,44w46,654,",
			"jiangmin\t,23545,6457,2455,7576,qr44453",
			"beijing\t,435435,6537,12424,44w46,654,",
			"xiaoming\t,46654,8579,w3675,85877,077998,",
			"xiaozhang\t,9789,788,97978,656,345235,09889,",
			"ceo\t,46654,8579,w3675,85877,077998,",
			"cto\t,46654,8579,w3675,85877,077998,",
			"zhansan\t,46654,8579,w3675,85877,077998," };
	Random random = new Random();

	@Override
	public void declareOutputFields(OutputFieldsDeclarer declarer) {
		declarer.declare(new Fields("key", "message"));

	}

	@Override
	public void nextTuple() {
		System.out.println("*****************");
		Utils.sleep(1000);
		String msg = info[random.nextInt(11)];
		collector.emit(new Values(msg,"testv"));
	}

	@Override
	public void open(Map map, TopologyContext contxt,
			SpoutOutputCollector collector) {
		this.collector = collector;
	}

}

class TestWordBolt extends BaseBasicBolt {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1611510001266293355L;

	@Override
	public void declareOutputFields(OutputFieldsDeclarer declarer) {
		declarer.declare(new Fields("key", "message"));

	}

	@Override
	public void execute(Tuple tuple, BasicOutputCollector collector) {
		String msg = tuple.getString(0);
		System.out.println(msg+"********baseBasicBolt************");
		if (msg != null) {
			collector.emit(new Values(msg + " msg is processed!" ,"testv"));
		}
	}

}



Flume、Kafka与Storm实现日志处理 1. ZooKeeper安装参考2. Kafka2.1 解压安装# 确保scala已经安装好,本文安装的是2.11.7 tar -xf kafka_2.11-0.9.0.1.tgz cd kafka_2.11-0.9.0.1 mkdir logsvim ~/.bash_profileexport KAFKA_HOME=/home/zkpk/kafka_2.11-0.9.0.1 export PATH 阅读详情

相关推荐

python实现storm读取kafka数据

环境准备 1、kafka、zk 2、安装storm 修改conf/storm.yaml,有笔记。 这个配置文件,空格 对齐 很重要 启动storm bin/storm nimbus【仅一台】 storm nimbus &gt;/dev/null 2&gt;&amp;1 &amp; bin/storm supervisor storm supervisor &gt;/dev...

gohigher2018的博客 3790

Storm调优(1)

storm.messaging.netty.server_worker_threads`: 服务器工作线程数,默认为1。`storm.messaging.netty.client_worker_threads`: 客户端工作线程数,默认为1。`storm.messaging.netty.transfer.batch.size`: 消息批处理大小。`storm.messaging.netty.socket.backlog`: 套接字连接数的最大排队数。单线程特性:Spout是单线程的,耗时操作会影响效率。

dianchi_li的博客 265

Storm-Kafka模块之写入kafka-KafkaBolt的使用及实现

Storm-Kafka模块之写入kafka-KafkaBolt的使用及实现

Tony_老七 7238

Spring boot 集成Kafka+Storm

转载请注明作者及出处 前言 ​ 由于业务需求需要把Strom与kafka整合到spring boot项目里,实现其他服务输出日志至kafka订阅话题,storm实时处理该话题完成数据监控及其他数据统计,但是网上教程较少,今天想写的就是如何整合storm+kafka 到spring boot,顺带说一说我遇到的坑。 使用工具及环境配置 ​ 1. java 版本jdk-1.8 ​ 2. 编译工具使...

weixin_33858485的博客 552

Spring boot 集成 kafka及storm

转载请注明作者及出处 前言​ 由于业务需求需要把Strom与kafka整合到spring boot项目里,实现其他服务输出日志至kafka订阅话题,storm实时处理该话题完成数据监控及其他数据统计,但是网上教程较少,今天想写的就是如何整合storm+kafka 到spring boot,顺带说一说我遇到的坑。使用工具及环境配置​ 1. java 版本jdk-1.8​ 2. 编译工具使用

m0_38031618的博客 4762

Storm集成Kafka

Storm集成Kafka

mxk4869的博客 608

Storm+kafka 开发

但是这又引入了另外一个问题,如果session.timeout.ms设置得很大,那么检测一个consumer挂掉的时间就会很长,如果业务是实时的,那这就是不能忍受的。session.timeout.ms用于心跳线程,而max.poll.interval.ms用于处理线程。如果处理线程死掉,则需要max.poll.interval.ms来检测它,但是,如果整个消费者死亡(并且一个垂死的处理线程很可能崩溃包括心跳线程在内的整个消费者),则只需要session.timeout.ms来检测它。

csdnzhang365的博客 950

netty+kafka+storm

netty,kafka,storm 整合jdbc,存入数据库!!!

storm与kafka结合

一、kafka基本概念       1、kafka是一个分布式的消息缓存系统       2、kafka集群中的服务器都叫做broker       3、kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接       4、kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消

王帆的专栏 3977

Win10环境下VS2019离线部署OnnxRuntime的完整指南

本文提供了在Windows 10系统下,为Visual Studio 2019进行OnnxRuntime离线部署的完整教程。针对网络受限环境,详细讲解了如何获取正确的离线安装包、配置本地NuGet源,并逐步指导项目配置与测试,确保AI模型在C++环境中顺利运行。

weixin_29205061的博客 400

第2章 数据库关系模型-单元测验-数据库原理及应用

第2章 数据库关系模型---数据库与机器学习 作业 常用的关系查询操作包括选择、投影、连接、并、交等。 v 实体完整性是指关系表的属性组成必须是完整的。 x 自然连接是一种等值连接。 v 在参照完整性中,可以定义级联操作。 v 用户自定义完整性可以实施数据的业务约束。 v 每个关系是一个二维表,但二维表不一定是关系。 v 关系中复合键至少包含两个属性。 v 代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示出来。 x ...

aiqq136的博客 5723

Storm与Kafka的集成

目录一、深入Kafka服务架构原理二、kafka集群安装与部署三、基于maven构建Storm-kafka工程四、Storm-kafka编程模型 版本选择: storm-1.2.3 kafka_2.11-0.8.2.2 一、深入Kafka服务架构原理 行业里最流行的Message Queue产品; MQ的特点:生产者,消费者 Kafka是LinkedIn开源出来的一个高吞吐的分布式消息系统。 使用scala开发,支持多语言客户端(c++、java、python等) 其具有以下特点: 支持高Throu

蔡政洁的博客 1001

Vivado工程芯片型号更换全流程:从IP更新到生成新bit文件(避坑指南)

本文详细介绍了Vivado工程中更换芯片型号的全流程,包括IP更新、约束文件适配和生成新bit文件的关键步骤。特别针对FPGA开发中常见的兼容性问题提供避坑指南,帮助开发者高效完成芯片迁移,确保设计稳定性和性能优化。

weixin_42549451的博客 297

Storm(七)Storm Kafka集成

集成storm与kafka

人是有思想的芦苇 5550

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

2079

一文吃透 Tools for Applying SAP Notes:从 SNOTE、TCI 到 Solution Manager 与 SAP Cloud ALM

本文系统梳理了SAP技术与运维团队应用SAP Notes的高效工具与方法,涵盖On-Premise与云环境。文章首先阐述了精研SAP Notes工具的必要性,指出其是实施错误修复、法务变更和性能改进的关键载体。随后详细介绍了SNOTE、TCI、Solution Manager、Cloud ALM和Maintenance Planner等核心工具的定位与适用场景,并通过采购异常案例展示了标准更正流程。针对复杂修复场景,文章提出了TCI的批量处理方案,并强调将Note实施纳入变更治理流程的重要性。最后总结了三种

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 354

Storm 系列(九)—— Storm集成Kafka

一、整合说明 Storm官方对Kafka的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对0.8.x版本的Kafka提供整合支持; Storm Kafka Integration (0.10.x+) : 包含Kafka 新版本的 consumer API,主要对Kafka 0.10.x +提供整合支持。 这里我服务端安装的Kafka版本为...

黑白影的博客 4229

YOLOv11 模型改进:利用新型损失函数实现精度跃升(含代码全解析)

在目标检测领域,损失函数的选择直接决定模型的精度上限。某自动驾驶公司将 YOLOv11 原有损失替换为新型损失后,障碍物检测 mAP 提升 10%,夜间场景误检率降低 22%;某物流分拣项目中,采用新损失的 YOLOv11 模型对小包裹的识别准确率从 82% 升至 96%。如果你也在为模型精度瓶颈、样本不平衡问题困扰,这篇教程将带你掌握 YOLOv11 损失函数的进阶技巧,真正帮你在检测性能上实现突破。损失函数是模型训练的“指南针”,它定义了模型“学习的方向”。传统损失(如 BCE、Focal Loss)在

m0_71589036的博客 713

Lucky 路由:5分钟配好DDNS+端口转发,告别记IP

周五晚上客户临时要一份NAS里的资料,人在地铁上根本连不上;光猫一重启,公网IP又换了,记IP这条路彻底走不通。 Lucky 是一款面向软硬路由的一体化工具:DDNS、IPv4/IPv6 端口转发、反向代理、WOL 远程唤醒,全部在一个网页后台里配完。 ## Docker一条命令部署 Lucky ```bash docker run -d --name lucky --restart=alw

gitblog_00536的博客 355

【30】软考软件设计师——UML类图与用例图满分精讲|下午第3题常考核心

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第30篇,聚焦**模块四:应用技术(下午题)第3道高频大题**,UML建模是历年下午必考核心,单题分值稳定10~12分。全文深度拆解两大核心UML图表:**类图**与**用例图**,超详细讲解类图三层结构、可见性修饰符、五大核心关系(泛化/关联/依赖/聚合/组合)的判定标准与绘图规范;吃透用例图参与者、系统边界、三大关系(包含/扩展/泛化)的底层逻辑,搭配独家**关系秒杀口诀、标准绘图模板、真题改错技巧**;全文适配补图、判断关系、分析场景、纠错优化

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 572

【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)

随着智能电动汽车行业的发展,汽车=智能终端+四个轮子,而人工智能也发展越来越快,Python语言使用越来越广,本章节主要介绍如何使用Python语言基于Pytest自动化框架来实现DoIP诊断自动化测试。首先回顾一下DoIP诊断基础知识:DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。

测试领域技术分享 3795

storm统计服务开启zookeeper、kafka 、Storm(sasl认证)

启动拓扑图时需要指定stormStatics.jar 包,如果使用新storm安装包没有,请自行找测试部要stormStatics.jar包。zookeeper设置用户密码,并设置连接zookeeper白名单。单独配置zookeeper 支持acl 设置用户和密码,在storm不修改代码情况下和kafka支持。当前版本不支持连接kafka支持 ACL, 需要修改storm jar包,待研发布支持版本。当kafka 开启ACL时,storm 和ccod模块不清楚配置用户和密码。

平凡的运维之路的博客 1460

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Storm应用系列之——集成Kafka

本文系原创系列,转载请注明。 原帖地址:http://blog.youkuaiyun.com/xeseo 前言 在前面Storm系列之——基本概念一文中,提到过Storm的Spout应该是源源不断的取数据,不能间断。那么,很显然,消息队列系统、分布式内存系统或内存数据库是作为其数据源的很好的选择。本文就如何集成Kafka进行介绍。 Kafka的基本介绍:http://blog.csdn

Edison Xu 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Storm集成Kafka简单实现

Storm集成Kafka简单实现 kafka有比较大的吞吐量,不仅在实时流数据处理上有很大的优势,更大的优势还在于它的缓存机制,storm做实时流数据的处理也是很不错的框架,比较合适的使用场景在于kafka对流数据的缓存,然后storm作为kafka的消费者,kafka作为storm的spout实现对实时数据的处理 以下为storm集成kafka简单实现的demo 由于kafka和storm...

Jamson 1324

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

storm-kafka源码分析

storm-kafka源码分析@(KAFKA)[kafka, 大数据, storm]storm-kafka源码分析 一概述 一代码结构 二orgapachestormkafka 三orgapachestormkafkatrident 1spout 2state 3metric 四其它说明 1线程与分区 二orgapachestormkafka 一基础类 1Broker 2BrokerHosts 3P

jediael_lu的专栏 4880
上一篇: spark windows单机安装,intellij、eclipse开发
下一篇: 技术疑惑解决
wangyang_software
博客等级 码龄17年 24粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值