Apache Storm和LMAX Disruptor之间有什么截然不同的区别?两者都在一起解决不同的问题吗?如果是,它们是什么?几天来,我一直在学习ApacheStorm,我发现它与LMAX Disruptor有一些相似之处。尽管LMAX中断器用于在线程之间传递消息,但对数据进行某些处理的事件被链接在一起(如树、菱形、三角形、简单序列)。类似地,风暴的喷口由多个螺栓链接,这些螺栓对数据执行一些处理,数据从一个螺栓传递到另一个螺栓,直到没有更多螺栓为止。这与LMAX干扰器不相似,还是我看错了?除
背景:
在一个集成测试中看到空指针,该测试在本地生成的stom集群中运行。增加了日志级别,但无法了解到底发生了什么。如果您有任何帮助,我们将不胜感激。您的问题与标题不太相符。如果您希望更好地访问可伸缩应用程序的日志(无论是在Hadoop还是Storm上),请查看从多个节点和系统收集和聚合日志的工具。我对PaperTrail和GreyLog很熟悉,但我相信还有其他的。这些工具,再加上明智地使用日志级别,可以帮助您快速发现可伸缩应用程序中的错误
如果您希望更好地了解系统的性能(这是我听到“可视化”时
我可以在完成螺栓中的某些任务后手动调用清理吗?比如说,在处理完一组输入后,清除代码中使用的哈希
还有一种方法可以在获取事件时触发整个拓扑的运行吗?例如,如果我正在从一个消息队列中读取一条新消息,那么如何对拓扑强制执行另一次运行?我现在需要创建一个新拓扑吗?在回答之前,有一个警告。假设一次只有一个起始元组遍历拓扑并不一定安全,请搜索该参数的文档
为了清理您的数据,您有几个选项,第一个是使用,当它确认了给定起始元组的所有传入元组时,这将在每个螺栓上触发回调
如果您所做的只是清除缓存,那么我们将使用一
我正在围绕我的Storm拓扑构建一个监控服务,并希望能够获得不同时间窗口的失败元组数,类似于Storm UI在10m、3h和1d窗口中显示失败元组数的方式
我的监控服务目前是用python构建的,因此如果答案涉及python库或与语言无关的东西,如使用CLI或使用REST端点,我将不胜感激。我查看了Storm CLI和文档,但到目前为止,对于Storm UI实际从何处获取信息,我还是空手而归
编辑:
-运行storm版本0.8.2(不幸的是我无法控制),因此在升级之前,storm ui rest
随着Storm 0.10.0的发布,DRPCClient的签名被更改,从而包含一个Map参数
//配置映射,drpc服务器,端口号,呼叫超时
新的DRPCClient(conf,“192.168.0.217”,37725000);
默认情况下,conf具有以下功能
Config conf=new Config();
conf.setDebug(false);
这将创建一个异常
java.lang.NullPointerException
java.lang.RuntimeException:
我想在b-0bolt中添加一些日志语句,以确认在execute方法中是否有任何非勾选元组
我该怎么做
storm-version -0.9.0.1
调试完成后,我通过单击Storm UI中喷口的端口号使用了logviewer
2016-01-19 16:55:25 b.s.d.executor [INFO] Processing received message source: __system:-1, stream: __tick, id: {}, [5]
2016-01-19 16:55
我有一个关于工作进程配置的问题
我已经了解了工作进程在工作节点(机器)内运行。我想知道的是,所有工作进程是否共享同一个JVM,或者每个工作进程是否都有自己的JVM实例?如果后者是真的,那么我想应该设置每个进程必须使用多少内存!那么这个配置将在哪里完成呢?每个工作节点都在自己的JVM上独立运行。但它们可以为一个或多个拓扑运行一个或多个辅助进程
如果后者是真的,那么我想应该设置每个进程必须使用多少内存!那么这个配置将在哪里完成呢
如果您打算设置JVM参数,请按照讨论进行操作
工作进程执行拓扑的子集,
拓扑结构由一个喷嘴和几个螺栓(B1、B2、B3)组成。
拓扑方案如下所示:S->B1->B2->B3。
2个辅助进程用于运行拓扑。
偶尔损坏的数据会进入拓扑结构,导致螺栓B1崩溃。Storm恢复受影响的工作进程并重新启动螺栓B1。但是在那之后,螺栓B1不会从喷口接收任何元组。通过调试模式,我可以在workers日志中看到,spout实际上发送元组,但bolt B1似乎从未接收和处理元组
Nimbus.log和supervisor.log未显示任何错误,Storm将工作分配给已恢复的工作人员。
我是storm的新手,当我提交拓扑管理器日志时
still hasn't start
配置是
tickTime=2000
dataDir=/tmp/zookeeper
clientPort=2181
syncLimit=5
initLimit=10
zookeeper的版本是3.4.5
我正在使用
java版本“1.6.0_38”
Java(TM)SE运行时环境(build 1.6.0_38-b05)
Java HotSpot(TM)客户端虚拟机(构建20.13-b02,混合模式,共享)
在我的流中,我的元组无论如何都不会拆分。最终为中的每个元组执行一个操作
如果他们遇到某种异常,我仍然可以让他们失败,如果我的KafkaSpout重播,他们可能会克服这种异常。虽然,我不知道我的喷口如何知道在没有锚定的情况下重放哪个元组,但在测试中,它似乎重放了正确的元组。这是预期的吗,KafkaSpout实现以某种我不知道的方式跟踪元组/消息?我是否可能锚定了一个没有意识到它(我的螺栓扩展BaseRichBolt)?可能我只是错了,它重播的是正确的
但是如果手动失败确实有效,那么我相信锚定的唯一
最近我遇到了一个非常奇怪的问题。风暴群有3台机器。拓扑结构是这样的,Kafka喷出A->Bolt B->Bolt C。我已经确认了每个Bolt中的所有元组,即使可能会在内部Bolt中抛出异常(在Bolt execute方法中,我尝试捕获所有异常,最后确认元组)。
但奇怪的事情发生了。我打印了喷口的日志,在一台机器上打印了喷口打包的所有元组,但在另外两台机器上,几乎所有元组都失败了。60秒后,元组一次又一次地重放“几乎”意味着在开始时,其他两台机器上的所有元组都失败了。过了一段时间,两台机器上出现
我有一个包含喷口/螺栓的风暴拓扑。
有一些特定于特定喷口和喷嘴的配置数据
还有一个我想使用的特殊螺栓,即从配置文件中读取
所以它不是硬编码的。配置数据的示例是
喷口是用来读取的,一个文件名是用来写入的。
我认为配置数据被传递到open和prepare方法中
如何合并配置文件中特定于组件的数据?至少有两种方法:
1在Storm config中包括特定于应用程序的配置,该配置将在IBolt.prepare ISpout.open方法调用期间可用。您可以使用的一种策略是为配置键设置应用程序前缀,以避免
我看到许多代码片段,其中在Spout.nextTuple()中使用了一个循环(例如,读取整个文件并为每行发出一个元组):
这段代码似乎是直截了当的,但是,有人告诉我应该不要在nextTuple()内循环。问题是为什么?执行喷口时,它在单个线程中运行。此线程“永远”循环并具有多个职责:
调用speut.nextTuple()
检索“确认”并对其进行处理
检索“失败”并处理它们
超时元组
要实现这一点,关键是不要在nextTuple()中“永远”(即循环或块)停留,而是在向系统发出元组后返回(或者如
我用以下命令启动了风暴光环和监督员
sudo storm nimbus &
sudo storm supervisor &
是否有一种方法可以在不使用kill-9进程的情况下停止集群此链接可能对您有用:
我正在制作storm拓扑,我正在处理这种格式的字符串:“x-x-x-x”,其中x是一些数字。我希望字符串流在4个螺栓之间相等地分割
问题在于,对于以下代码,所有螺栓都会获取所有元组,而不是将每个元组发送给一个螺栓:
builder.setSpout("digits-spout", new ReaderSpout());
builder.setBolt("level-1", new SomeBolt(1)).shuffleGrouping("digits-spout");
builder.setB
风暴版本:1.2.1
作为链接,以下是句法来重新平衡风暴拓扑:
storm rebalance topology-name [-w wait-time-secs] [-n new-num-workers] [-e component=parallelism]*
我有一个简单的拓扑结构,其中一些boltBoltB使用parallelism 5和numTasks=1运行,我运行了以下命令:
storm rebalance myTopo -n 5(same as earlier) -w 20 -e
我有一个Spring框架配置文件
但是,当我在Storm群集上运行时,会出现一个错误,错误是:
Caused by: java.lang.IllegalArgumentException: Invalid connect parameters: {retryIntervalMultiplier=1.5, maxRetryInterval=60000, retryInterval=1000}
文档非常混乱。我不确定ActiveMQ和ActiveMQ Artemis配置是否相同或相似。我不知道
我正在使用它,它适用于许多用例。最近我看了一下,这是对Storm的高级抽象。它支持一次处理,使有状态处理更容易
但现在我想知道。。为什么我不能用三叉戟代替暴风
到目前为止我读到的:
Trident分批处理消息,因此吞吐量时间可能更长
Trident还不能处理拓扑中的循环
用三叉戟代替暴风雪还有其他缺点吗?因为现在,我认为上面列出的缺点是微不足道的
什么用例不能用Trident实现?
后果:
由于我问了这个问题,我的公司决定先购买三叉戟。只有在出现性能问题时,我们才会使用纯Storm。可悲的
在storm中运行拓扑时,我们会遇到这样的错误
8983 [Thread-6] INFO com.netflix.curator.framework.imps.CuratorFrameworkImpl -
Starting
9144 [main] INFO **backtype.storm.daemon.nimbus** - Shutting down master
9199 [Thread-6-EventThread] INFO backtype.storm.zookeeper - Zo
我有两个喷口,两个喷口都在释放一些数据
Spout A tuple-> pid, data1, data2, data3
Spout B tuple -> pid, m1, m2
我想把上面两个喷口的数据连接到“pid”上
JoinBolt将通过“pid”组合数据并发出元组(pid、data1、data2、data3、m1、m2)
若我在JoinBolt中的并行度为5,我可以确保来自具有相同pid的两个喷口的数据将落在JoinBolt的相同实例上
在本例中,由于并行度为5,所以将有
我已经为Apache Storm使用Active Directory设置了Kerberos身份验证。
kerberos安装后,Supervisor和Nimbus守护程序运行正常。
在storm.yaml文件中添加以下行时:
ui.filter: "org.apache.hadoop.security.authentication.server.AuthenticationFilter"
ui.filter.params : {‘type’: ‘kerberos’,
我是Trident的新手,我希望创建一个类似于“Sum()”的“Average”聚合器,但用于“Average”。以下操作不起作用:
public class Average implements CombinerAggregator<Long>.......{
public Long init(TridentTuple tuple)
{
(Long)tuple.getValue(0);
}
p
错误是:
java.lang.RuntimeException: Error when launching multilang subprocess
at backtype.storm.task.ShellBolt.prepare(ShellBolt.java:105)
at backtype.storm.daemon.executor$fn__3493$fn__3505.invoke(executor.clj:689)
at backtype.storm.util$a
我正在使用带有ack机制的storm 0.8.2,关于失败和重试,我有几个问题:
我可以限制重试次数吗
我如何独自处理错误?对于某些错误,我想重试(例如,数据库没有响应),而对于其他错误,我不想重试(例如,解析元组时出错)
我可以限制重试次数吗
不是内置功能。你应该在你的喷口中实现这个逻辑
如何控制错误?这意味着对于一些错误(即db没有响应),我想重试,而对于其他错误(即解析元组的错误),我不想重试
我真的建议您阅读整个Storm文档,尤其是。否则,我会把它转贴在这里。一旦你掌握了Storm如何
我有一个螺栓,它使用一个大物体池。当池在4小时内重新初始化时,bolt会等待几秒钟并与zookeper断开连接。
我在yaml中指定了以下属性,但仍有工人死亡
supervisor.worker.start.timeout.secs 300
supervisor.worker.timeout.secs 60
以下是日志:
2015-02-17 04:35:01 o.a.z.ClientCnxn [INFO] Client session timed out, have not heard fr
我试图在apache Storm中使用并行概念。我想知道如何通过单个拓扑提交多个喷口
下面是我提交单个拓扑的代码
TwitterTopologyCreator topology = new TwitterTopologyCreator();
topology.createTopology(topologyName, clientName);
可以按以下方式在拓扑中使用多个喷口
TwitterTopologyCreator topology = new TwitterTopologyCreato
我一直在从事一个流处理项目,该项目使用ApacheStorm v1.1.0上的滑动窗口技术对传入数据进行流处理
我试图描述我在下图中遇到的问题。让我解释一下。e1、e2、e3、e4、e5、e6、e7、e8是我的事件,并按时间顺序来到Apache Storm。w1、w2、w3等表示窗口名称
[0,5]之间存在事件
[5,10]之间有一些事件
[10,15]之间没有事件
[15,20]之间没有事件
[20,25]之间没有事件
[25,30]之间有一个事件
[30,25]之间有一个事件
作为输出,Ap
我想检查一下这个主题的可行性、想法和最佳实践,同时,我会尝试添加更多的信息
Apache Storm可以根据我看到的使用情况进行静态设计、配置和管理,我们可以根据项目流入、吞吐量等管理并行性、节流等。我们还可以监控延迟、利用率等,以管理属性,更好地使用资源或管理放大/缩小
这里的问题是,所有这些都需要静态完成,并且需要手动干预
是否有一种方法可以将Storm配置或部署到基于容器的环境中,在这种环境中,我们可以通过较少的手动检查/静态配置实现自动缩放。在Docker中启动Storm workers
假设我有两条溪流:
Stream 1: [1,3],[2,4]
Stream 2: [2,5],[3,2]
常规合并将生成流3,如下所示:
[1,3],[2,4],[2,5],[3,2]
我希望合并流,同时保留
元组已发出,因此如果在时间1发出[2,5],则在时间1发出[1,3]
时间2,[3,2]在时间3和[2,4]在时间4,结果流将
是:
是否有办法做到这一点,如果有,如何做到?一些示例代码可能是
我很感激,因为我是一个三叉戟的新手,最近被推了出去
进入一个基于三叉戟的项目
提前感谢您的
在storm拓扑中的executor中使用多个任务有什么好处。我的意思是,我无法理解,除了做多种事情,我们可以实现任何速度或并行性?迈克尔·G·诺尔写了一篇伟大的文章,应该可以帮助你理解风暴并行性
通常,拓扑每个执行器运行一个任务。但是,由于无法在拓扑运行时增加任务数,因此可以为每个执行器声明多个任务,以便随时间扩展并行性
除了增加拓扑并行性的可能性之外,没有任何特定的用例可以让每个执行器有多个任务。我读过他的文章,但仍然不清楚当多个任务可以在一个执行器中使用时的实际用例是什么。关于stacko
我正在做一个学术项目,涉及处理来自传感器的流数据。我已经包围了Heron(风暴的成功者)和Nifi。两者都支持内置的背压,这对我的项目至关重要。
ApacheNIFI和Heron之间的主要区别是什么
哪一个更适合物联网应用?基本上可以归结为流处理与数据流
我认为这总结了一些差异:
简而言之-
NiFi更多的是从支持多种协议的设备上进行数据采集,而Heron是一个流处理引擎,允许在NiFi的数据流中进行复杂的流计算。Heron可以在一台服务器上与NiFi一起工作,因为Heron在本地安装时占用的空
这两者的区别是什么?据我所知,它们都是基于有向无环图(DAG)的概念,Storm实时处理数据,气流将整个过程从一个阶段移动到另一个阶段。这是他们之间唯一的区别吗?它们都适合做什么样的工作?气流是像阿兹卡班或奥齐这样的协调引擎。Storm是一个近乎实时的处理引擎,在很大程度上已被Spark Streaming或Heron(Twitter对Storm的第二代替代品)所取代。这个问题相当广泛,但文档中也有一些解释,即。
我想看看每个螺栓的性能,并决定平行度的数量
在storm UI中有几个字段令人困惑,所以如果您能告诉我,我会很高兴
容量(最后10米)-单个执行器在最后10分钟内每秒的平均容量?
例如,如果Capcity为1.2,是否意味着单个执行器平均每秒处理1.2条消息
执行延迟和处理延迟-是平均值还是最后处理的消息的值?
它们之间有什么区别?
它们和容量有什么区别
我发现了一篇描述Storm UI的好文章。您可以通过以下链接访问:
因此,我们有:
容量(最后10米)–如果该值在1.0左右,则相应的螺栓将
我是风暴环境的新手,我有一个问题!我有两个喷孔(喷孔和喷孔),将数据发射到螺栓(螺栓1)。我是这样定义这个螺栓的:
builder.setBolt("bolt1", bolt1).shuffleGrouping("spoutA").shuffleGrouping("spoutB");
在bolt1中是否有办法知道每个接收到的元组的源(spoutA或spoutB)?来自
如果实现订阅多个输入源的bolt,则可以使用Tuple#getSourceComponent方法找出元组来自哪个组件
我们有一个相当简单的风暴拓扑结构,有一个头痛
我们的一个螺栓可以发现它正在处理的数据是有效的,并且每件事情都像正常的一样进行,或者它可以发现它是无效的,但可以修复。在这种情况下,我们需要发送一些额外的处理
我们尝试使用单独的螺栓和流将此步骤作为拓扑的一部分
declarer.declareStream(NORMAL_STREAM, getStreamFields());
declarer.declareStream(ERROR_STREAM, getErrorStreamFields());
根据给定的链接,螺栓的承载能力是执行过程中所花费时间的百分比。因此,该值应始终小于1。但在我的拓扑结构中,我观察到它在某些情况下会超过1。这怎么可能?这意味着什么
这意味着您的螺栓正在超负荷运行,如果螺栓无法跟上,您的拓扑将在处理过程中落后
当您看到一个螺栓超过(或接近超过)容量时,这就是您需要开始调整性能和并行性的线索
您可以做的一些事情:
通过增加执行器和任务的数量来增加螺栓的平行度
在慢速螺栓中进行一些简单的分析,看看是否存在性能问题
您可以使用Storm Metrics了解螺栓中发生的更
当execute()返回时,螺栓将由下一个元组执行?如果螺栓没有确认上一个元组,会发生什么?换句话说,我们能在execute()返回后确认元组吗
如果螺栓长时间不确认一个元组,那么默认情况下,喷口将再次向下游发出父元组,螺栓将再次由同一元组执行,对吗?如果螺栓确认一个已经被喷口视为失败的旧元组,会发生什么情况?如果螺栓中没有确认输入元组,喷口可能会再次发出根元组
是的,在execute返回后确认元组是可以的,只要您在合理的时间范围内(在消息超时过期并且喷口再次发出根元组之前)确认元组即可
如果确
我编写了一个拓扑,从kKafka中读取主题,然后进行聚合,然后将结果存储到数据库中。拓扑运行了几个小时,但随后工人死亡,最终主管也死亡。每次运行数小时后都会出现此问题
我在3个节点上运行storm 0.9.5(1个用于nimbus,2个用于workers)
这是我在一个工人日志中得到的错误:
2015-08-12T04:10:38.395+0000 b.s.m.n.Client [ERROR] connection attempt 101 to Netty-Client-/10.28.18.21
我使用开源版本的Esper来执行一些复杂的事件处理。我正在使用Esper+Storm的组合,以便我可以在网络上分布的Storm bolt中编写我的CEP逻辑
Esper还提供高可用性的HA版本。我的问题是,使用Esper HA而不是使用Esper(开源)+Storm组合有什么好处。EsperHA+Storm与Esper+Storm具有相同的优点,添加了Esper语句状态的持久性。在风暴工人进行故障转移或重新平衡时,状态不会丢失
如何在暴风雨中拥有多种拓扑。拓扑是否可以相互交互?
我需要一个拓扑来做一些事情,并在数据库中插入数据。然后,来自其他拓扑的其他线程可能应该从DB中拾取数据并执行所需的任务
如果他们有任何教程,请建议。是的,您可以,您也可以为同一风暴节点(为同一风暴管理器)运行多个拓扑。
通过打开多个端口并提交两种拓扑
supervisor.slots.ports:
- 6700
- 6701
您还可以在代码中动态设置设置,如worker.childopts。是的,您还可以为同一风暴节点(针对同
我已经使用docker compose安装了Apache Storm
docker-compose.yml:
kafka:
image: spotify/kafka
ports:
- "9092:9092"
- "2181:2181"
environment:
ADVERTISED_HOST: 172.16.8.37
ADVERTISED_PORT: 9092
nimbus:
command: --daemon nim
我有以下依赖项
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
我试图设置Storm来聚合一个流,但是在同一个流上有不同的(DRPC可用)度量
例如,流由具有发送者、接收者、消息到达的通道和消息传递的网关的消息组成。我在决定如何组织一个或多个拓扑结构时遇到问题,例如,按网关和/或按通道组织的消息总数。除了总数,每分钟的计数也不错
基本思想是有一个接受消息传递事件的喷口,然后根据需要聚合数据。目前,我正在研究Trident和DRPC,我提出了两种可能的拓扑结构,在现阶段解决了这个问题。无法决定哪种方法更好,如果有的话
整个源代码在此上可用。
它有三类:
我有如下的暴风雪
package storm.bolt;
import java.util.Map;
import org.apache.accumulo.core.client.AccumuloException;
import org.apache.accumulo.core.client.AccumuloSecurityException;
import org.apache.accumulo.core.client.BatchWriter;
import org.apache.ac
是否有可能将元组失败的原因从导致元组失败的螺栓传递到发出元组失败的喷口?对于某些失败原因,我希望在“喷口失败”方法中使用不同的逻辑。因为public void failObject id只接受id,您可能需要自己管理它
在bolt内部,将元组id与失败原因一起保存到某个分布式键/值存储中?是否有方法从任意bolt中的任意元组获取根元组id?如果我将msgId作为自定义类,我可以创建一些setter和getter,我只需要从元组下游获取它。奇怪的是,Storm不允许您至少访问和更改msgId对象的
我能够在多租户集群中提交拓扑作业。作业正在运行。但是,logviewer页面不可用。有什么方法可以解决这个问题吗?在单击拓扑端口查看logviewer之前,需要启动logviewer。
要启动logviewer运行,请执行以下操作:
$storm logviewer与您运行的相同$storm list对于logviewer的主页,我遇到了相同的问题,但直接导航到logs文件夹中存在的特定日志文件。试试这个:
MachineIP:8000/log?file=worker-6700.log您的意思是
我想知道它们之间的区别,它们是如何相互关联的,以及“锚定元组”和“acker任务”的作用是什么。如果可能,请提供详细解释和示例。我已经阅读了官方文档和一些相关文章,但我对这个主题的理解不清楚。StreamID:默认情况下,有一个名为default的单一(逻辑)流。在某些用例中,有必要不是一个(逻辑)流,而是多个(每个流中有不同的数据)。为此,您可以声明其他流并为它们分配一个ID(即名称)以区分它们(这在declareOutputFields(…)方法中完成)。在将拓扑“插入”到一起时,默认情况下
我们正在使用storm进行处理,并在supervior.log文件中获得以下错误日志:
2015-10-14 11:40:05,012 INFO [CuratorFramework-0-SendThread(127.0.0.1:2181)] o.apache.storm.zookeeper.ClientCnxn - Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenti
在这里,我无法将文件对象从喷口传递到螺栓。我是不是遗漏了什么?首先,我的问题是,我们可以使用以下方法将物体从喷口传递到螺栓:
SpoutToutCollector collect.emit(文件名)
这里fileName是包含文件对象的对象列表 您的代码不起作用,因为您的喷口发出一个列表,其中包含文件对象,这些对象被序列化并发送到螺栓。因此,螺栓可以接收如下文件对象列表:
public void execute(元组){
列表文件=(列表)tuple.getValue(0);
}
但我想,这
storm.yaml(apache storm 1.1.1)中的主管财产观察到以下例外情况。它为0.9.7级风暴工作。supervisor.slots.port:
–6700–6701–6702–6703
线程“main”中的c:\home>storm nimbus异常
java.lang.ExceptionInInitializeError
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:348)
位于
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 15 页