我正在尝试在多节点Storm集群上测试Storm+Kafka+Trident作业
当我在机器1中运行作业时,作业将运行并处理记录
当我在添加第二个工人后运行作业时,该作业也会毫无问题地运行
当我向集群添加第三个worker时,问题就开始了。我在工人日志中得到以下信息
2014-07-16 16:47:56 b.s.m.n.Client [INFO] Reconnect started for Netty-Client-cassandra1/10.201.221.139:6701... [29]
我们在单节点开发服务器中配置了Storm,大多数配置设置为默认(非本地模式)。
只有storm nimbus、主管和工作人员在该单个节点中运行,并且还配置了UI
AFAIK并行性和配置因拓扑而异。
我认为找到正确的并行性和配置只是通过尝试和错误的方法
因此,为了找到最佳的并行性,我们已经开始在单个节点中使用各种配置测试Storm拓扑
奇怪的是,结果出乎意料:
我们的拓扑处理来自HDFS目录的xml文件流。
有一个单喷嘴(平行度始终为1)和四个螺栓
单身工人
无论拓扑并行性如何,我们都能获得几
我正在看一个Apache Storm的例子。
以下是Bolt类的片段
公共无效declareOutputFields(outputfieldsclarer declarer){
declarer.declare(新字段(“word”);
}
Declarer用于表示Bolt将发出的字段类型。那么,当上面的语法说“newfields(“word”)时意味着什么呢 它定义了输出元组的模式。即,一个元组有多少个属性以及每个属性的名称
Fields(“word”)使用名为word的单个属性定义架构。因此
我想在弹性搜索中使用
但是我找不到任何JavaAPI来支持同样的功能
我经历过,但似乎没有人解决这个问题
我的代码:
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
this.collector = collector;
Settings settings = ImmutableSettings.settingsBuilder()
拓扑结构如下所示。
如何确保具有多个输入的bolt仅在所有输入到达时才进行处理?bolt.execute()将为每个传入元组调用,而不管生产者是什么(您无法更改此设置)。如果要同时处理来自不同生产者的多个元组,则需要编写自定义UDF代码
每个生产者都需要一个输入缓冲区,可以缓冲传入的元组(可能是一个LinkedList作为bolt成员)
对于每个传入的元组,您将元组添加到相应的缓冲区(您可以通过。input.getSourceComponent()
将元组添加到缓冲区后,检查每个缓冲区是否至少
我有一个Storm拓扑,我必须将输出发送到kafka,并更新redis中的值。为了这个,我有一个卡夫卡波特和一个雷迪斯博尔特。
下面是我的拓扑结构的样子-
tp.setSpout("kafkaSpout", kafkaSpout, 3);
tp.setBolt("EvaluatorBolt", evaluatorBolt, 6).shuffleGrouping("kafkaStream");
tp.setBolt("ResultToRedisBolt",ResultsToRedisBolt,
我正在尝试向storm提交我的拓扑:
稀疏提交
虚拟环境正在成功创建,并且“精益清洁”也已成功完成。
但是,当它试图创建一个罐子时
莱因罐
它给了我一个错误“创建jar失败”
我已经检查了我的系统,lein已成功安装,并且在“project.clj”中的版本号正确
只有当我将拓扑提交给storm时,才会出现此错误。
即使我检查了我的拓扑、喷口和螺栓代码,也没有任何错误
最新版本的Lein无法使用Streamparse。我也有同样的问题,我把Lein的分数降到了2.7.1。
它非常适合我。您是否也
我正在尝试爬网不同的网站(电子商务网站),并从每个网站的页面中提取特定信息(即产品价格、数量、发布日期等)。
我的问题是:如何配置解析,因为每个网站都有不同的HTML布局,这意味着根据网站的不同,我需要为同一项目使用不同的XPath?我们可以为每个网站在拓扑中添加多个解析器螺栓吗?如果是,我们如何为每个解析器螺栓分配不同的parsefilters.json文件?您需要。目前,除了将所有XPATH表达式放在parsefilters.json中,而不管您想在哪个站点上使用它们,没有其他方法可以做到这
这是我在阅读后提出的一个问题:
如果我需要在bolt的内部状态中保存一些信息,例如,在经典的单词计数用例中,将bolt中看到的每个单词的计数保存在hashmap中。执行“rebalance”命令后,可以将服务器的任务移动到另一个执行器,该执行器可能位于另一个JVM甚至另一台机器中。bolt的内部状态(本例中的单词计数hashmap)是否会传输到新环境(instance/JVM/machine)
当然,将单词计数hashmap放在Zookeeper这样的中心位置不会有这个问题。但出于性能考虑,有
我怎样才能解决这个问题
java.lang.NoClassDefFoundError:com/google/common/base/premissions
在
org.apache.curator.emble.fixed.FixedSembleProvider.(fixedSembleProvider.java:39)
在org.apache.curator.framework上
及
java.lang.NoClassDefFoundError:org/apache/curator/RetryP
我正在使用Storm解析和保存来自Kafka的数据。数据以一些标识符的形式输入,然后是大小不同的映射。经过一番咀嚼,最终的目标是卡桑德拉
我应该将数据作为一个元组块发送,还是将地图拆分并分别发送每个数据块 元组应该表示流中下一个螺栓的“工作单元”。如果您认为您的映射是一个单独的实体,它被处理为一个单独的(尽管很复杂)对象,那么映射应该作为一个元组发出。如果希望不同的螺栓独立处理不同的贴图属性,则将贴图分解为随后可处理的属性子集,并发出多个元组。这取决于要发送的元组的大小
在Storm中发出的每个
我正在使用zookeeper和storm集成。storm应用程序正常运行了一段时间,然后出现错误:
org.apache.storm.shade.org.apache.zookeeper.KeeperException$ConnectionLossException:KeeperErrorCode=ConnectionLoss
问题是什么???
我知道SpoutConfig有retryLimit来设置消息可以重新处理的次数
关于retryLimit,这是我在SpoutConfig.class中找到的消息:
指数回退重试设置。这些都是由
ExponentialBackoffMsgRetryManager,用于在中断后重试邮件
调用OutputCollector.fail
我想知道,当元组在我的代码中的任何给定螺栓中被处理时,是否有任何方法可以知道重试的确切次数
例如,如果我将retryLimit设置为5,并且第一次调用OutputColl
当我尝试以storm jar wordcount.jar words.txt的形式运行单词计数拓扑时,我得到以下错误:
我的拓扑结构如下所示:
为什么我会出现这个错误?我正在使用storm-0.8.2外部jar并安装了storm 0.8.2。请再次阅读stacktrace:
线程“main”java.lang.NoClassDefFoundError中出现异常:streaming.words.txt
这有什么意义吗?再次检查您的设置。神圣的烟雾,gcj?Clojure需要实际的java运行时环境
这个问题简直让我发疯。我在本地局域网上运行了一个单机风暴实例。我目前正在运行v0.9.1-cubatingrelease版本(来自。问题很简单,我的storm supervisor进程在每次重新启动后都拒绝启动。黑客修复非常简单,从storm本地目录中删除supervisor和workers文件夹,然后重新运行该进程;然后运行到下一个reb奥特
我正在提供我认为可能与调试此问题相关的所有信息。如果需要,请询问更多信息,但请帮助我获得一些解决方案
PS:不管我是否运行拓扑
Zookeeper版本:
我刚从暴风雪开始。我有一个喷口(1个执行器)和一个螺栓(4个执行器)的简单拓扑结构。喷嘴和螺栓通过“随机组合”连接
从我看到的情况来看,spout只将元组发送给bolt执行器的一个子集,即与spout在同一主机上运行的执行器
这是预期的吗?是否有办法将荷载分散到所有螺栓执行器上,无论它们在何处运行?是的,这是意料之中的。我认为您可以使用相同的喷口源进行配置,比如storm Integrated with kafka,然后创建2个拓扑,使用相同的主题和相同的zookeeper主机配置每个拓扑的每个
我得到以下异常风暴拓扑
java.lang.NoSuchMethodError: org.apache.kafka.common.network.NetworkSend.<init>(Ljava/lang/String;[Ljava/nio/ByteBuffer;)V
at kafka.network.RequestOrResponseSend.<init>(RequestOrResponseSend.scala:41) ~[stormjar.jar:?]
我正在使用风暴。。。我想将topology.sleep.spout.wait.strategy.time.ms的时间从1毫秒(默认值)增加到1秒。但我不知道这个在哪里。我有一个config类,它的定义如下
public static final String TOPOLOGY_SLEEP_SPOUT_WAIT_STRATEGY_TIME_MS="topology.sleep.spout.wait.strategy.time.ms";
我想在类为backtype.storm.config
我应
结构为水槽+卡夫卡+风暴。一开始,集群运行良好。但一段时间后,风暴雨云袭来,工人们都死了。在storm worker日志中发现异常:
2016-03-31 19:42:58.574 o.a.z.ClientCnxn [INFO] Client session timed out, have not heard from server in 13333ms for sessionid 0x10065cc
4feb0030, closing socket connection and attempt
目前,我试图寻找风暴的消息处理。我觉得滑动窗口功能很有趣,并尝试让它工作
但是,即使我将时间间隔设置为5秒,窗口后面的计算也要频繁得多。似乎每个新消息都会执行tuple窗口的execute方法
builder.setBolt("messageCountBolt",
new MessageCountBolt()
.withWindow(
new BaseW
我有一个非常基本的拓扑结构。从KafkaSpout开始,它有3个螺栓。第一个螺栓是CassandraWriterBolt,用于在Cassandra中写入数据,其余两个螺栓从Cassandra中读取旧数据,使用新旧数据创建另一组数据,然后再次将该数据插入Cassandra
在开发期间,我在LocalCluster中运行该拓扑。它运行几秒钟,然后开始关闭worker、executor等。最后,它失败,出现与Cassandra驱动程序相关的异常-
java.lang.IllegalStateExcep
是否可以在storm拓扑中的特定工作节点上执行一组元组(基于特定字段)。需要最小化群集中的网络负载。您可以选择。。。它将允许您将特定任务绑定到主管,可能值得一看有一个准备好的喷口/螺栓可以进行缓存。但我想,要对某个特定的员工进行优化是不可能的。
我有一个从Kafaka队列订阅事件的storm拓扑。当workers config.setNumWorkers的数量设置为1时,拓扑工作正常。当我将worker的数量更新为一个或两个以上时,KafkaSpout在查看storm UI时无法确认消息。可能的原因是什么,我无法弄清楚,问题的精确性
我有一个3节点的集群,运行一个nimbus和两个管理器 我的问题得到了解决。卡夫卡无法确认喷口消息的原因是与主机名冲突。我在两个worker的/etc/hostname和/etc/hosts文件中错误地使用
我对Storm还比较陌生,最近我把我的螺栓换成了从IRichBolt继承的
而不是BaseCBolt,这意味着我现在负责确认和失败
一个符合我自己逻辑的元组
螺栓A向螺栓B和C发出相同的元组,每个元组将数据持久化到Cassandra。
这些操作不是幂等的,并且包括对两个不同计数器列族的更新。
我只想让元组失败并在Cassandra的某些异常中重放它(不是读/写超时,只是QueryConsistency或Validation异常)。
问题在于,如果螺栓B出现故障,相同的元组将从喷口重新播放,并再
我查过了
不过,我的问题是:
例如,一旦bob执行一项任务,他将始终执行同一项任务,比方说,任务id为X。
当我添加新节点时,会在新节点中启动更多新线程和新任务吗?如果是,bob将转到新线程,新任务是什么?
如果不是这样,那么会有线程在新节点中启动吗
我是风暴新手,希望我能清楚地描述我的疑问。一旦部署拓扑,拓扑中的任务数量不会改变。请参阅以更好地理解任务和线程之间的区别
例如,假设Bob转到worker Z中的执行器中运行的任务X。当您添加新节点(并触发重新平衡)时,任务X可能被分配给worke
升级Storm平台后,在相同的内存和线程设置下,我们的拓扑运行速度约为100%,即在同一测试集上花费的时间是原来的两倍
拓扑正在处理不同长度的文档。这些文件被分成几个句子。通过在“文档级别”或“句子级别”上操作的螺栓完成进一步处理。处理语句的螺栓被设置为更高的并行性。在Storm版本1.2.0中,当在一台服务器上的两个辅助服务器上运行时,我们发现了最佳性能,基于文档的螺栓的并行度设置为2,而基于语句的螺栓的并行度设置为8。辅助程序xmx设置为2048mb。此配置在Storm 2.2.0上的运行速
我用卡夫卡壶嘴来消费信息。但是,如果我必须更改拓扑并上传,那么它将从旧消息恢复还是从新消息开始?卡夫卡喷口向specity提供了从何处消费的时间戳,但我如何知道时间戳?spoutConfig.forceStartOffsetTime(-1)
它将选择围绕该时间戳写入的最新偏移量开始使用。你可以
通过传入-1,强制喷口始终从最新偏移开始,然后可以强制
它需要从最早的偏移量开始,传入-2
如果使用KafkaSpout,请确保:
在您的spootConfig中,“id”和“zkroot”在
重新部署新
有人能解释一下如何将trident storm中的数据写入/读取到内存网格ApacheIgnite中吗。我在谷歌上搜索,没有找到任何关于如何从trident storm连接到内存网格的信息/文档。我认为Apache Ignite和storm之间的集成应该是确保通过storm传输的数据最终进入Apache Ignite缓存。为此,您只需将数据放入Ignite缓存。向缓存中添加大量数据的最佳方法是使用org.apache.ignite.IgniteDataLoader.addData。。。API.谢
对于中的简单字数计算程序,逻辑相当简单:
1) 将句子拆分成单词
2) 发出每个单词
3) 聚合计数(将计数存储在映射中)
然而,这里有两个问题:
1) 程序使用12个单独的线程来执行聚合部分,这意味着计数不是全局的,我们必须再添加一层来获得全局计数
2) 在bolt中,映射用于存储计数,这意味着它具有状态,如果当前工作进程失败,那么bolt中存储的所有计数都将消失?因为风暴是无状态的
3) 我们应该使用三叉戟来实现这一点吗?每个螺栓包含全球状态单词的1/12。字段分组每次都将特定的字发送到同一
目前,我能够部署24种拓扑,但在那场风暴之后,工作人员将耗尽。有人能建议如何增加Storms上的工作人员吗?可以部署到集群的拓扑数量最终取决于可用的cpu/ram数量以及工作人员需要的cpu/ram数量
您可以增加supervisor.slot.ports的数量,以便在给定的机器上有更多的工人。如果定义10个端口,则可能有10个工作端口
另请参见。伙计,请说明你为什么投反对票。这里没有人是完美的。
我的拓扑从Kafka读取,并对外部系统进行HTTP调用。卡夫卡的接收速率约为每秒200条信息。外部系统每秒仅支持20个HTTP调用。如何引入节流,使HTTP调用的插销每秒仅处理20条消息?您可以使用拓扑.max.spout.pending设置,根据拓扑中飞行的元组数对spout进行节流。该设置是针对每个喷口实例的,因此,如果您有10个喷口执行器,并且设置了最大100个元组,则拓扑中的最大元组数将为1000个
您可以使用OutputCollector上的resetTimeout方法来防止要延迟的元
我一直在用storm设计一台真正的发动机。我使用trident拓扑基本上聚合了我们网站上发生的一些活动,并将其保存到cassandra。我阅读这篇文章是为了理解如何在cassandra中持久化这些值。我试图通过将txnId和count存储在cassandra中来定义事务性喷口(不确定它是否真正是事务性的)。我的输入源是RabbitMq队列
我们正在更新以小时为单位的计数,也就是说,一小时内发生的所有活动都将汇总并作为单个条目存储在cassandra中。我面临的问题是,只要拓扑运行,计数就会正确更
我在一个拓扑中有1个喷口和3个螺栓,它们共享一个流,最初使用喷口的declareStream(s1,…)方法中的declareOutputFields()声明
喷口向流s1发射,所有下游螺栓也向同一流s1发射值。螺栓还在其declareOutputFields()中声明相同的流s1
这有什么问题吗?正确的方法是什么?请提供足够的参考资料。我认为您的设计没有任何问题,除非您有特定的原因,否则它是不必要的。根据风暴文件:
Saying declarer.shuffleGrouping(“1”)订阅默
我正在研究storm拓扑,需要为不同的客户端位置构建多个拓扑
我有一个Kafka服务器,它生成需要到达远程客户端机器的数据(在服务器中进行一些转换之后)。其中大约有1000名客户。
当卡夫卡中产生了新数据时,客户需要在几分钟内获得这些数据。
需要进行一些转换(可以通过螺栓处理),数据通过websocket发送到远程客户端
e、 g:Kafka服务器->Kafka喷口->Bolt1->bolt2->bolt3->websocket(在客户端机器上)
我有1000台客户机
我希望这种拓扑结构可以为每
ApacheIgnite和ApacheStorm在许多方面都是两种截然不同的技术,特别是因为Storm有一个非常特定的用例,而Ignite在同一个平台下有相当多的工具。据我所知,Ignite的核心是它的内存存储。在此基础上建立了对数据位置敏感的计算。在此基础上,还有各种各样的酷“玩具”。我感兴趣的是流功能,它基本上是一个在内存缓存中变化的查询侦听器
如果我将滑动窗口设置为一个元组,Ignite将提供一次一个元组的功能,就像Storm一样。数据通过Ignite存储在内存中。Storm不会以内存的方
我总是遇到以下错误:
[错误]尝试连接到Netty客户端-/202.162.247.10:6731失败:java.net.ConnectException:连接被拒绝:/202.162.247.10:6731
为什么会这样?
我尝试了多次并在谷歌上搜索,但没有找到解决方案。发布一些代码,并在问题中添加一些更有用的标记,以便更多用户可以访问此帖子。我也有同样的问题,请查看此错误:
我是新的风暴,我正在运行一个主题
public class FakeCallLogReaderSpout implements IRichSpout {
//Create instance for SpoutOutputCollector which passes tuples to bolt.
private SpoutOutputCollector collector;
private boolean completed = false;
//Create inst
我正在阅读ApacheStorm,以评估它是否适合我们的实时处理需求
有一件事我现在还不知道——当下一个节点无法处理元组时,元组存储在哪里。例如,假设喷口A以每秒1000元组的速度生产,但下一级螺栓(处理喷口A输出)只能以每秒500元组的速度集体消耗。其他元组会发生什么?它是否有一个基于磁盘的缓冲区(或其他东西)来解释这一点?通常,Storm Spoot会读取某个持久存储并跟踪元组的完成情况,以确定何时可以安全地删除或确认该存储中的消息。香草风暴本身并不存在元组。发生故障时,元组将从源中重放
我
我有一个Storm拓扑,它可以计算每分钟的聚合。
我想通过Java单元测试来介绍应用程序,但我不能
找到一些Java单元测试的工作示例
我需要及时模拟变化,获取拓扑输出并进行测试。解决方案似乎是:
Testing.withSimulatedTimeLocalCluster(new TestJob() {
public void run(Cluster cluster) {
// your testing logic here.
Time.advanceTi
我们团队目前正在进行一个基于ApacheStorm的项目。我们有两个不同且孤立的环境用于开发和生产。每个环境都有自己的拓扑配置值。Storm中是否有任何工具可以在不手动设置值的情况下启用每个环境中的每个配置?您可以将环境(dev/prod)作为参数传递给Storm jar,并根据环境加载属性配置。
使用STORM_JAR_JVM_OPTS env属性时,属性传递不正确
我在处理storm starter项目()时遇到了“问题”
首先在storm.starter.WordCountTopology中主方法的开头插入以下行:
String property = System.getProperty("properties.folder");
System.out.println("PROPERTIES.FOLDER: " + property);
然后设置STORM\u JAR\u JVM\
我已经编译了一个拓扑。在nimbus状态下,我有一些像这样的数字序列
executor->start-time-secs <[2 2]1389244616,[3 3]1389244616,[4 4]1389244616,[5 5]1389244616,
executor->序列中的开始时间秒
:executor->start-time-secs <[2 2]1389244616,[3 3]1389244616,[4 4]1389244616,[5 5]138924461
嗨,我在生产服务器上设置了storm。运行supervisorctl status会产生以下输出
storm_nimbus RUNNING pid 24955, uptime 15:51:16
storm_supervisor RUNNING pid 24953, uptime 15:51:16
storm_ui RUNNING pid 24956, upti
我的拓扑使用默认的KafkaSpout实现。在一些非常受控的测试中,我注意到喷口在元组失败,即使我的螺栓没有任何元组失败,而且我确信所有消息都在配置的超时内得到了充分处理
我还注意到(由于我的螺栓的一些子分类结构),我的螺栓之一是两次确认元组。当我解决这个问题时,喷口停止了元组的失败
很抱歉,这不仅仅是一个理智的检查而不是一个问题,但这有意义吗?我不明白为什么两次确认同一个元组实例会导致喷口注册超时,但在我的情况下似乎是这样的?这是有道理的
Storm以一种奇怪但有效的方式跟踪由喷口发出的元组的
标签: Apache Storm
complex-event-processingespersiddhistream-processing
我正在做一些流处理与复杂事件处理相结合的研究。我想使用一个开源软件来处理Apache的Storm。我发现了像Esper、Siddhi、,Sase+但我正在寻找专门在Apache-Storm上工作的东西。是否有任何CEP引擎可以在Storm上完美调整,如果有,引擎的内部结构是什么(例如在1 bolt或其他方面工作)。任何信息都是最受欢迎的。使用Siddhi作为其核心CEP引擎,它与ApacheStorm紧密集成,还通过向其添加分发注释来支持分布式部署Siddhi查询计划。文件和样品均可用。Stor
我在集群中运行ApacheStorm,我正在寻找停止和/或重新启动Nimbus、Supervisor和UI的方法。写一份服务会有帮助吗?我应该在这个服务文件中写什么?我应该把它放在哪里?提前感谢您是的,编写服务是运行Storm的推荐方式。要运行的命令包括启动nimbus的storm nimbus(每个集群至少1个)、storm supervisor运行监控程序(每个工作机器1个)、storm ui(每个集群1个)和storm logviewer(每个工作机器1个)。您还可以运行其他命令,但只需运
TwitterStorm可以作为一个应用程序进行管理和运行吗?此外,这样做明智吗?我希望建立一个基于纱线的库,在管道的隐喻中管理批处理和流处理。例如水龙头(水源)、管道(接头和过滤器)、储罐(分批处理)和排水管(汇至FS、数据库等)。这似乎是一个相当实验性的项目,但你可以看看Storm Spread convergence project
请看一看和相关的
请帮助。您确定要使用Storm进行此处理吗?看起来批处理应用程序可能更合适
无论如何,您可能可以让它工作,但我建议让您的喷口将数据分割成更易于管理的块,可以由您的Bolt处理。Hi Kit Menke,客户需要kafka/storm中的解决方案。Hi Kit Menke,Bolt应该只执行bin可执行文件来处理地震文件。在Spoot能够以块的形式成功读取文件后,Bolt是否能够为此文件格式SEGY或SU形成元组(它不是可读格式,也无法在unix/windows中打开)?它包含跟踪的集合。请提供帮
Apache Storm是如何在其工作人员之间分配任务的,我了解到Storm是自己完成任务的,它是一个并行函数,但我不知道的是,我如何计算出哪个节点完成什么任务,以及有多少节点将完成什么任务,基本上这样我就可以计算出所需的最佳节点数?
假设所有节点的硬件配置都不相同。您需要查看storm UI。指标:完整延迟、容量、执行延迟、进程延迟和失败元组将为您提供“提示”,说明您应该为每个螺栓分配多少执行者和任务 默认情况下,Storm使用“循环”调度,即使用可用插槽在所有监控器上循环,并分配喷口/螺栓的
我正在5个r4.xlarge EC2节点的集群上使用Storm v1.2.1。目前,我正在处理一个涉及基于时间的滑动窗口查询的网络数据集。在为我的用例找到足够好的配置进行了无数次尝试和错误循环之后,我遇到了Executor类,它在storm客户端模块中维护了一个名为pendingEmits的成员,类型为MpscChunkedArrayQueue line 119,类:org.apache.storm.Executor.Executor。此队列具有1024个元素的硬编码上限
每次我尝试使用数据集进
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 15 页