Apache Flink流缩放

问题描述 投票:1回答:1

我是Apache Flink的新手,我正在尝试了解一些有关与Kafka一起扩展Flink流媒体工作的最佳实践。我无法找到合适答案的一些问题包括:

  1. 你可以/应该运行多少个流媒体作业?运行太多流是否存在可伸缩性问题?多少钱?
  2. 如果我们运行让我们说2000个流来满足业务需求,那么管理这些流的最佳方法是什么?
  3. 从一个流到另一个流读取流数据的首选方法是什么?我们可以加入流,执行连续查询等吗?

如果这些问题看起来有点基础,请提前感谢任何支持和道歉,但我正在努力更好地处理这项技术。我已经阅读了大部分文档,但由于我在这方面缺乏经验,因此可能不会将一些概念放在一起。谢谢你的帮助!

streaming apache-kafka apache-flink
1个回答
1
投票
  • 对流的数量没有限制,flink将根据作业管理器/任务管理器的内存/ CPU,正在使用的并行化和插槽数量进行缩放。我使用YARN来管理资源。如果连接的流的数量很高,那么我们需要稍微谨慎一点,即并非所有/大部分处理都发生在某些任务管理器上,因为这会减慢流程。卡夫卡流本身可能存在滞后,或者由于某些任务管理器负载过重而导致内部滞后,因此需要进行预防性检查。
  • Continuous Queries支持已作为最新flink版本的一部分构建,您可以查看flink文档。
  • 如果通过读取一个数据流到另一个数据流意味着用flink术语连接两个流,那么我们可以在公共密钥上连接它们并保持值状态。请注意,值状态在任务管理器中维护,不在任务管理器之间共享。否则,如果你暗示两个或更多流的并集,那么我们可以构建flatmap函数,使得来自这些流的数据以标准格式出现。 结合的例子:
val stream1: DataStream[UserBookingEvent] = BookingClosure.getSource(runmode).getSource(env)
      .map(new ClosureMapFunction)

val stream2: DataStream[UserBookingEvent] = BookingCancel.getSource(runmode).getSource(env)
      .map(new CancelMapFunction)

val unionStream: DataStream[UserBookingEvent] = stream1.union(stream2)

---

import org.apache.flink.api.common.functions.MapFunction
import org.json4s.jackson.JsonMethods.{parse => _, parseOpt => _}
import org.json4s.native.JsonMethods._
import org.slf4j.{Logger, LoggerFactory}

class CancelMapFunction extends MapFunction[String, Option[UserBookingEvent]] {
  override def map(in: String): Option[UserBookingEvent] = {
    val LOG: Logger = LoggerFactory.getLogger(classOf[CancelMapFunction])
    try {
      implicit lazy val formats = org.json4s.DefaultFormats

      val json = parse(in)
      ..............
     } catch {
      case e: Exception => {
        LOG.error("Could not parse Cancel Event= " + in + e.getMessage)
        None
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.