# 中煤项目 ## 传输模块 要点:生产者端使用单topic单partition,保证顺序消费,重试次数设置为0,ACK设置为1。消费端设置线程池去多线程消费,使用redis记录偏移量,手动提交ACK 使用list记录数据量 项目演化过程: 直接看监控,JVM监控,grafana * kafka挂了:主要原因是kafka线程连接数量过多,kafka报错,直接增大网络线程数和I/O线程数,优化监控模块连接复用 * kafka挂了:CPU压力过大,集群压力过大,增大与ZK的默认响应事件zookeeper.connection.timeout.ms=60000 * 消费乱序:消费者因为触发reblance导致消费乱序,原本的partition-2分区给了消费者-02,因为存储到一个list里面导致乱序 * 消息堆积:消费者传输的消息体过大,导致传输延迟过大,直接减少传输的消息,改为多批次发送。问题得到缓解 * 消费者挂:各个节点流量不一样,(如果进行hash分区)导致该节点压力过大。解决直接进行单topic单partition * 消息挤压:单topic单partition导致消费能力不足,使用线程池进行消费 * 重复消费:因为消费者重启导致的,使用redis可以解决 * CPU暴涨:使用线程池导致消费问题,具体解决方法。优化线程池参数减小= * 项目无法启动,报错:error,**文件描述符**,默认是1024,改到最大值65535,用户过多,调整一下 * redis挂了怎么办:直接重试,三次就跳过 * kafka消费者挂了怎么办:使用定时任务直接重启 * websocket:因为nginx的原因,定时ping/pong * 内存过大:TOP命令,主要是kafka和hbase的配置问题 BUG: * JMX监控问题:使用JMX导致无法连接,开放端口 * JVM堆内存已满:**VisualVM**分析,因为hbase配置文件创建不当,改为单例模式 * beanutils问题:由于名称原因,导致无法注入 ```java public static String decapitalize(String name) { if (name == null || name.length() == 0) { return name; } if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) && Character.isUpperCase(name.charAt(0))){ return name; } char chars[] = name.toCharArray(); chars[0] = Character.toLowerCase(chars[0]); return new String(chars); } ``` * 线程池无法调用问题:自定义策略问题 CPU标高:TOP命令 # 实习项目 要点:使用责任链模式进行判断,shortcut的功能,区分TCP和UDP,使用策略模式进行选择。选择合适的进行解析。使用bytebuffer进行解析。封装工具类, 分库分表,16个表4*4,大概就是每个设备1秒10条消息。一共一天80万条数据。 使用 哈希散列算法 分治路由 * batch insert * 导致事务注解失效 * SPI ## 职业规划 作为应届生加入xxx。希望能在这个大平台,能够相周围优秀的同事们学习,学习xxx的文化,通过追赶他们,让自己成为一个更加职业化,专业化的人。在公司工作一段时间后希望可以独立承担公司业务,(事业心+好心态+稳定) * 入职 1 年,熟悉工作情况,在努力学习本职工作相关知识的同时学习业务相关的知识,积极参加团队活动,与同事和谐相处 * 入职2-3年,精进业务水平,在稳定提升的基础上做到独当一面,保证完成日常工作的同时汇总工作经验 * 入职3-5年,在总结经验的基础上产出方法论,积极与同事、上级交流沟通,助力培养部门设计学习进步氛围,提升产品的体验竞争力