apache flink流缩放

iq0todco  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(391)

我对apache flink是一个新手,我正在尝试了解一些与kafka一起扩展flink流媒体作业的最佳实践。有些问题我无法找到合适的答案,包括:
您可以/应该运行多少流作业?运行太多流是否存在可伸缩性问题?多少钱太多了?
如果我们确实运行了2000个流来满足业务需要,那么管理这些流的最佳方法是什么?
从一个流到另一个流读取流数据的首选方法是什么?我们可以加入流、执行连续查询等吗。。。?
提前感谢您的支持,如果这些问题看起来有些基本,请道歉,但我正在尝试更好地处理这项技术。我已经阅读了大量的文档,但无可否认,由于我在这方面缺乏经验,我可能没有把一些概念放在一起。谢谢你的帮助!

efzxgjgh

efzxgjgh1#

流的数量没有限制,flink将根据作业管理器/任务管理器的内存/cpu、使用的并行化和插槽的数量进行扩展。我用Yarn来管理资源。如果要连接的流的数量很高,那么我们需要稍微谨慎一点,即不是所有/大部分的处理都在某些任务管理器上进行,因为这会减慢进程。Kafka流本身可能存在滞后,或者由于某些任务经理负载过重而导致的内部滞后肯定会出现,因此需要对此进行预防性检查。
连续查询支持已经作为最新flink版本的一部分构建,您可以查看flink文档。
如果从一个数据流读取到另一个数据流,您的意思是用flink术语连接两个数据流,那么我们可以在一个公共键上连接它们并保持一个值状态。请注意,值状态是在任务管理器中维护的,不会在任务管理器之间共享。否则,如果您暗示两个或多个流的并集,那么我们可以以这样的方式构建flatmapfunctions:来自这样的流的数据以标准格式出现。
联合示例:

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
      }
    }
  }
}

相关问题