使用Kafka和Kafka Stream设计高可用任务调度( 三 )
主题名称提取器希望将每个任务计划发送到特定主题 , 相应的任务使用者将从中从中选择要执行的任务 。由于具有动态性质 , 因此使用TopicNameExtractor接口的实现来确定目标主题 。此实现将使用"任务定义"中的"任务配置"集返回正确的主题名称 。
public class TargetTopicNameExtractor implements TopicNameExtractor {@Overridepublic String extract(final TaskDefinitionKey taskDefinitionKey,final TaskDefinition taskDefinition,final RecordContext recordContext) {return taskDefinition.getConfig().getOutputTopic().toString();}}
Kafka流拓扑Kafka Stream DSL方法用于将变压器实现连接到拓扑 。由于没有其他处理器添加到拓扑 , 因此拓扑定义看起来非常简单 。
// create a Stream Builder instancefinal StreamsBuilder streamsBuilder = new StreamsBuilder();// Create the stream to consume the tasks/tasks definitions from the tasks topicsfinal KStream keyTaskDefinitionKStream = streamsBuilder.stream(Config.TASK_SCHEDULING_INPUT_TOPIC, consumed);// add processors using DSL and PAPIkeyTaskDefinitionKStream.transform(new TaskSchedulingTransformerSupplier(), Config.TASK_STORES).to(new TargetTopicNameExtractor(), Produced.with(getTaskDefinitionKeySpecificAvroSerde(), getTaskDefinitionSpecificAvroSerde()));
完成实施这篇文章简要介绍了实现 , 完整的实现可在下面的github中找到 。该github还包含一些测试实现 , 可用于生成测试任务计划 。
(本文翻译自Naveen Kumar的文章《High Available Task Scheduling — Design using Kafka and Kafka Streams》 , 参考:@cbenaveen/high-available-task-scheduling-design-using-kafka-and-kafka-streams-dcd81121d43b)
推荐阅读
- Biogen将使用Apple Watch研究老年痴呆症的早期症状
- Eyeware Beam使用iPhone追踪玩家在游戏中的眼睛运动
- 或使用天玑1000+芯片?荣耀V40已全渠道开启预约
- 苹果将推出使用mini LED屏的iPad Pro
- 手机能用多久?如果出现这3种征兆,说明“默认使用时间”已到
- 苹果有望在2021年初发布首款使用mini LED显示屏的 iPad Pro
- 笔记本保养有妙招!学会这几招笔记本再战三年
- 数据可视化三节课之二:可视化的使用
- 索尼sw77与sw55的使用差别感受
- 爆料称一加9系列与潜望式镜头无缘 继续使用普通长焦