使用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。
答案 0 :(得分:2)
我设法解决了这个问题。在我目前的设置中,工人们无法相互沟通。作业静默失败,没有任何超时错误(梁可能会传播为错误)。
如果您使用数据流作为跑步者,请确保为项目中的数据流定义的防火墙是为“默认”网络定义的。
如果为您的网络定义了数据流防火墙,则需要将其他运行时参数传递到您的作业中
- workerMachineType = n1-standard-8 --autoscalingAlgorithm = THROUGHPUT_BASED --maxNumWorkers = 4 --network ='your-network'