} catch (Exception e) {

return new Result(Action.EXECUTE_FAILED, e.getMessage());

}

return new Result(Action.EXECUTE_SUCCESS, “执行成功了,哈哈”);

}

}

###API方式启动

TaskTracker taskTracker = new TaskTracker();

taskTracker.setJobRunnerClass(MyJobRunner.class);

taskTracker.setRegistryAddress(“zookeeper://127.0.0.1:2181”);

taskTracker.setNodeGroup(“test_trade_TaskTracker”);

taskTracker.setClusterName(“test_cluster”);

taskTracker.setWorkThreads(20);

taskTracker.start();

###Spring XML方式启动

leveldb

###Spring注解方式启动

@Configuration

public class LTSSpringConfig implements ApplicationContextAware {

private ApplicationContext applicationContext;

@Override

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

this.applicationContext = applicationContext;

}

@Bean(name = “taskTracker”)

public TaskTracker getTaskTracker() throws Exception {

TaskTrackerAnnotationFactoryBean factoryBean = new TaskTrackerAnnotationFactoryBean();

factoryBean.setApplicationContext(applicationContext);

factoryBean.setClusterName(“test_cluster”);

factoryBean.setJobRunnerClass(MyJobRunner.class);

factoryBean.setNodeGroup(“test_trade_TaskTracker”);

factoryBean.setBizLoggerLevel(“INFO”);

factoryBean.setRegistryAddress(“zookeeper://127.0.0.1:2181”);

factoryBean.setMasterChangeListeners(new MasterChangeListener[]{

new MasterChangeListenerImpl()

});

factoryBean.setWorkThreads(20);

Properties configs = new Properties();

configs.setProperty(“job.fail.store”, “leveldb”);

factoryBean.setConfigs(configs);

factoryBean.afterPropertiesSet();

// factoryBean.start();

return factoryBean.getObject();

}

}

##参数说明

##使用建议 一般在一个JVM中只需要一个JobClient实例即可,不要为每种任务都新建一个JobClient实例,这样会大大的浪费资源,因为一个JobClient可以提交多种任务。相同的一个JVM一般也尽量保持只有一个TaskTracker实例即可,多了就可能造成资源浪费。当遇到一个TaskTracker要运行多种任务的时候,请参考下面的 “一个TaskTracker执行多种任务”。 ##一个TaskTracker执行多种任务 有的时候,业务场景需要执行多种任务,有些人会问,是不是要每种任务类型都要一个TaskTracker去执行。我的答案是否定的,如果在一个JVM中,最好使用一个TaskTracker去运行多种任务,因为一个JVM中使用多个TaskTracker实例比较浪费资源(当然当你某种任务量比较多的时候,可以将这个任务单独使用一个TaskTracker节点来执行)。那么怎么才能实现一个TaskTracker执行多种任务呢。下面是我给出来的参考例子。

/**

* 总入口,在 taskTracker.setJobRunnerClass(JobRunnerDispatcher.class)

* JobClient 提交 任务时指定 Job 类型 job.setParam(“type”, “aType”)

*/

public class JobRunnerDispatcher implements JobRunner {

private static final ConcurrentHashMap<String/*type*/, JobRunner>

JOB_RUNNER_MAP = new ConcurrentHashMap<String, JobRunner>();

static {

JOB_RUNNER_MAP.put(“aType”, new JobRunnerA()); // 也可以从Spring中拿

JOB_RUNNER_MAP.put(“bType”, new JobRunnerB());

}

@Override

public Result run(JobContext jobContext) throws Throwable {

Job job = jobContext.getJob();

String type = job.getParam(“type”);

return JOB_RUNNER_MAP.get(type).run(job);

}

}

class JobRunnerA implements JobRunner {

@Override

public Result run(JobContext jobContext) throws Throwable {

// TODO A类型Job的逻辑

return null;

}

}

class JobRunnerB implements JobRunner {

@Override

public Result run(JobContext jobContext) throws Throwable {

// TODO B类型Job的逻辑

return null;

}

}

##TaskTracker的JobRunner测试 一般在编写TaskTracker的时候,只需要测试JobRunner的实现逻辑是否正确,又不想启动LTS进行远程测试。为了方便测试,LTS提供了JobRunner的快捷测试方法。自己的测试类集成

com.github.ltsopensource.tasktracker.runner.JobRunnerTester即可,并实现initContext和newJobRunner方法即可。如lts-examples中的例子:

public class TestJobRunnerTester extends JobRunnerTester {

public static void main(String[] args) throws Throwable {

// Mock Job 数据

Job job = new Job();

job.setTaskId(“2313213”);

JobContext jobContext = new JobContext();

jobContext.setJob(job);

JobExtInfo jobExtInfo = new JobExtInfo();

jobExtInfo.setRetry(false);

jobContext.setJobExtInfo(jobExtInfo);

// 运行测试

TestJobRunnerTester tester = new TestJobRunnerTester();

Result result = tester.run(jobContext);

System.out.println(JSON.toJSONString(result));

}

@Override

protected void initContext() {

// TODO 初始化Spring容器

}

@Override

protected JobRunner newJobRunner() {

return new TestJobRunner();

}

}

##Spring Quartz Cron任务无缝接入 对于Quartz的Cron任务只需要在Spring配置中增加一下代码就可以接入LTS平台

##Spring Boot 支持

@SpringBootApplication

@EnableJobTracker // 启动JobTracker

@EnableJobClient // 启动JobClient

@EnableTaskTracker // 启动TaskTracker

@EnableMonitor // 启动Monitor

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

剩下的就只是在application.properties中添加相应的配置就行了, 具体见lts-example中的

com.github.ltsopensource.examples.springboot包下的例子

##多网卡选择问题 当机器有内网两个网卡的时候,有时候,用户想让LTS的流量走外网网卡,那么需要在host中,把主机名称的映射地址改为外网网卡地址即可,内网同理。

##关于节点标识问题 如果在节点启动的时候设置节点标识,LTS会默认设置一个UUID为节点标识,可读性会比较差,但是能保证每个节点的唯一性,如果用户能自己保证节点标识的唯一性,可以通过 setIdentity 来设置,譬如如果每个节点都是部署在一台机器(一个虚拟机)上,那么可以将identity设置为主机名称

##SPI扩展说明 支持JobLogger,JobQueue等等的SPI扩展

##LTS-Admin使用jetty启动(默认),不定期挂掉解决方案

lts admin如果长时间不使用,会隔一段时间挂掉。

原因是admin使用内嵌的jetty启动的,jetty会把lts admin的war包解压到根目录下的/tmp,而这个tmp目录如果长时间没有更新,会被cron任务定时删除的,删除后就会出现页面打开只有文字,js、css都加载不出来。

解决方案:

修改lts-admin.sh脚本,其中启动那段改为如下的,新增了一个-D参数,保证war解压到这个目录,不会被删掉。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

  • 第一个是算法

关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

《算法的乐趣》共有23个章节:

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

-1712809472763)]

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

[外链图片转存中…(img-RHIIDUr0-1712809472763)]

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

[外链图片转存中…(img-DXDmGzPw-1712809472763)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-fcz0ZF8p-1712809472764)]

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐