在工作人员自动调整

时间:2018-02-13 01:45:37

标签: google-cloud-dataflow apache-beam spotify-scio

使用scio版本0.4.7,我有一个流媒体工作,正在听pubsub主题,我在这里使用事件处理' timestamp' RFC3339中的消息属性上显示的属性

val rtEvents: SCollection[RTEvent] = sc.pubsubTopic(args("topic"), timestampAttribute = "timestamp").map(jsonToObject)
val windowedEvents = rtEvents.withFixedWindows(Duration.standardMinutes(1L),
  options = WindowOptions(trigger = Repeatedly.forever(AfterWatermark.pastEndOfWindow()),
    accumulationMode = DISCARDING_FIRED_PANES,
    allowedLateness = Duration.standardSeconds(1L)
  )
)

我使用windowedEvents在管道中进一步聚合和计算

doSomeAggregation(windowedEvents)

def doSomeAggregation(events: SCollection[RTEvent]): SCollection[(String, Map[String, Int])] =
        events.map(e => (e.properties.key, (e.properties.category, e.id)))
          .groupByKey
          .map { case (key, tuple: Iterable[(String, String)]) =>
            val countPerCategory: Map[String, Int] = tuple.groupBy(_._1)
              .mapValues(_.toList.distinct.size)
            //some other http post and logging here
            (key, countPerCategory)
          }

    sc.close().waitUntilFinish()

如果我使用google dataflow上的以下自动缩放参数运行作业

--workerMachineType=n1-standard-8 --autoscalingAlgorithm=THROUGHPUT_BASED
--maxNumWorkers=4

如果只有一个工作人员在运行,则作业运行并且固定窗口正确启动。一旦作业自动升级到更多> 1名工人,固定窗户停止射击和初始pubsub步骤的系统滞后和墙壁时间不断增长,而数据水印不会向前移动。

我的触发器设置有问题吗?还有其他人在数据流跑者或其他跑步者身上遇到过这种情况吗? 任何帮助是极大的赞赏。如果我无法解决这个问题,我倾向于放弃scio并恢复到apache-beam java sdk。

1 个答案:

答案 0 :(得分:2)

我设法解决了这个问题。在我目前的设置中,工人们无法相互沟通。作业静默失败,没有任何超时错误(梁可能会传播为错误)。

如果您使用数据流作为跑步者,请确保为项目中的数据流定义的防火墙是为“默认”网络定义的。

如果为您的网络定义了数据流防火墙,则需要将其他运行时参数传递到您的作业中

  

- workerMachineType = n1-standard-8 --autoscalingAlgorithm = THROUGHPUT_BASED   --maxNumWorkers = 4 --network ='your-network'