连接到数据库的风暴螺栓

sqserrrh  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(278)

我有一个喷口,它从一个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。

8yparm6h

8yparm6h1#

使用localorshufflegrouping时,会发生以下情况:
如果目标bolt在同一个工作进程中有一个或多个任务,元组将被洗牌到那些进程中的任务。否则,这就像一个普通的随机分组
假设你的工人是这样的:

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。工人3和4将处于空闲状态。
如果您还想将元组发送到worker 3和worker 4,则需要切换到shuffle分组。

相关问题