我有一个从40K qps的源读取的扩展。我有两个螺栓,第一个从源代码读取,并进行数据库连接以构建缓存,该缓存每小时刷新一次。数据库为用户打开了2个连接,因此我对此螺栓的执行器计数是2。
另一个螺栓被分配了200个执行者和200个任务来处理请求。
我不能增加到数据库的连接。我看到所有的请求都是针对单个员工的。其他工作人员继续等待并打印"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'我使用的是本地和分组混洗。
发布于 2019-11-15 23:40:52
使用LocalOrShuffleGrouping时,会发生以下情况:
如果目标螺栓在同一工作进程中有一个或多个任务,那么元组将被混洗到那些进程中的任务中。否则,这就像一个普通的随机分组。
假设你的工人看起来是这样的:
worker1: {"bolt1 task 1", "bolt2 task 0-50"}
worker2: { "bolt1 task 2", "bolt2 task 50-100"}
worker3: { "bolt2 task 100-150"}
worker4: { "bolt2 task 150-200"}在本例中,因为您告诉Storm在从bolt1发送到bolt2时使用本地分组,所以所有的元组都将发送到worker 1和Worker 2。Worker 3和4将处于空闲状态。
如果您还想将元组发送到worker 3和worker 4,则需要切换到随机分组。
https://stackoverflow.com/questions/58878143
复制相似问题