我有一个喷口,它从一个40k qps的源读取。我有两个bolt,第一个是从源代码读取数据并建立数据库连接,以构建一个每小时刷新一次的缓存。数据库为一个用户打开了2个连接,所以我对这个螺栓的执行器计数是2。
另一个bolt分配了200个执行者和200个任务来处理请求。
我无法增加到db的连接。我看到所有的要求都是单身工人。其他工作人员继续等待并打印“0发送消息”。
kafkaSpoutConfigList:
- executorsCount: 30
taskCount: 30
spoutName: 'kafka_consumer_spout'
topicName: 'request'
processingBoltConfigList:
- executorsCount: 2
taskCount: 2
boltName: 'db_bolt'
boltClassName: 'com.Bolt1Class'
boltSourceList:
- 'kafka_consumer_spout'
- executorsCount: 200
taskCount: 200
boltName: 'bolt2'
boltClassName: 'com.Bolt2Class'
boltSourceList:
- 'db_bolt::streamx'
kafkaBoltConfigList:
- executorsCount: 15
taskCount: 15
boltName: 'kafka_producer_bolt'
topicName: 'consumer_topic'
boltSourceList:
- 'bolt2::Stream1'
- executorsCount: 15
taskCount: 15
boltName: 'kafka_producer_bolt'
topicName: 'data_test'
boltSourceList:
- 'bolt2::Stream2'
我正在使用localandgroupshuffling。
1条答案
按热度按时间8yparm6h1#
使用localorshufflegrouping时,会发生以下情况:
如果目标bolt在同一个工作进程中有一个或多个任务,元组将被洗牌到那些进程中的任务。否则,这就像一个普通的随机分组
假设你的工人是这样的:
在本例中,因为您告诉storm在从bolt1发送到bolt2时使用本地分组,所以所有元组都将发送到worker 1和worker 2。工人3和4将处于空闲状态。
如果您还想将元组发送到worker 3和worker 4,则需要切换到shuffle分组。