KafkaScheduler用于处理内部线程 配置文件中的backgroundThreads参数表示线程池大小
KafkaScheduler.scala 中的注释说的明白:
It has a pool of kafka-scheduler- threads that do the actual work.
KafkaScheduler继承了Scheduler Scheduler 有三个方法:新建调度、终止调度、调度task
// A scheduler for running jobs
trait Scheduler {
// Initialize this scheduler so it is ready to accept scheduling of tasks
def startup()
// Shutdown this scheduler.
// When this method is complete no more executions of background tasks will occur.
// This includes tasks scheduled with a delayed execution.
def shutdown()
// Schedule a task
def schedule(name: String, fun: () => Unit, delay: Long = 0,
period: Long = -1, unit: TimeUnit = TimeUnit.MILLISECONDS)
}
KafkaScheduler内部使用ScheduledThreadPoolExecutor进行调度
构造器三个参数分别是线程数,线程名称前缀和守护线程标记 后面两个都有默认值
class KafkaScheduler(val threads: Int,
val threadNamePrefix: String = "kafka-scheduler-",
daemon: Boolean = true) extends Scheduler with Logging
每隔一段时间调度运行一次fun函数…… fun方法并没有返回值 schedule使用它的副作用
对 就是这个函数名 什么意思? 谁知道什么意思! 我猜多半是当时不知道叫什么 随意起的名字
val runnable = new Runnable {
def run() = {
fun()
}
}
if (period >= 0)
executor.scheduleAtFixedRate(runnable, delay, period, unit)
else
executor.schedule(runnable, delay, unit)