谢谢你抽出时间。
通过在每个分区上使用800 MB
数据进行泛洪测试,完成读取需要22秒
。
再次使用parallelism_hint=1的代码
即builder.setspout(“spout”,new KafkaSpout(cfg),1);
public SpoutDeclarer setSpout(java.lang.String id,
IRichSpout spout,
java.lang.Number parallelism_hint)
其中,
parallelism_hint-是应该分配给执行此spout的任务数。每个任务将在集群周围某个进程的线程上运行。
我在storm-user上遇到过一个讨论,讨论了类似事情。
阅读喷口平行度与Kafka分区数之间的关系。
使用kafka-spout for storm时需要注意的两件事
List<HostPort> hosts = new ArrayList<HostPort>();
hosts.add(new HostPort("localhost",9092));
SpoutConfig objConfig=new SpoutConfig(new KafkaConfig.StaticHosts(hosts, 4), "spoutCaliber", "/kafkastorm", "discovery");
builder.setSpout("spout", spout,4);
您可以在使用setspout
方法将您的spout添加到拓扑中时提及相同的内容。这里4是并行性提示。
更多可能有帮助的链接
理解Storm拓扑的并行性
我已经开始使用storm,所以我使用本教程创建简单的拓扑 我的嘴是这样的 我的螺栓是这样的
我试图使Kafka消费者同步消费Kafka的消息。 我遇到的实际问题是消息队列存储在Storm Spout中。 我想做的是让暴风雪等待Kafka的回复,然后让暴风雪消耗下一条信息。 我正在使用Storm KafkaSpout: 我已经更新到Storm 2.0.0,我使用Storm kafka客户端。但是如果我将Storm队列配置为50:
我使用storm0.9.4和storm-kafka:0.9.0-wip16a-scala292作为从kafka0.7读取的依赖项。 我们的Kafka保留政策是7天。 我从经纪人的最新偏移量开始读取。
这里可能发生了同样的事情:错误backtype.storm.util-Async循环死亡!BufferUnderFlowException:null,但我将添加一个完整的堆栈跟踪和一些更多的上下文。 Storm版本-9.3 Storm-Kafka版本-9.3 Kafka版本-0.8.2-beta 堆栈跟踪: Spout代码(注意,出于调试目的,我使用的是一个静态定义的分区映射,只有一个代理):
当运行两个线程时,对于spout,文件的每一行都读取两次。 我是新手,我想知道处理这件事的最好方法?我可以将线程的数量减少到1个,或者修改spout,使每个线程读取不同的行--或者(如何)我需要使用TopologyContext参数?我不确定我是否错过了一个“Storm”的方式来解决这个问题?
我确实意识到Kafka中保证了每个分区的顺序。但是当有多个分区并且生产者没有指定键,而只有1个消费者时,分区会受到什么影响(为什么有1个消费者?对于当前数据加载1很好,有多个分区供将来使用) 1) 订购是否会受到影响? 2) 使用者是否会从分区0,1读取数据。。20一个接一个按顺序? 3) 即使我们指定了分区键,我们是否可以保证我们会进行适当的排序?(哈希冲突的情况除外)