zoukankan      html  css  js  c++  java
  • 实时电商数仓(四)之数据采集(三)搭建日志采集系统的集群(三)子模块:日志采集模块 logger --(单机开发调试)

     1.1 springboot简介

    Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

     

    1.1.1有了springboot 我们就可以

    1  不再需要那些千篇一律,繁琐的xml文件。

    2  内嵌Tomcat,不再需要外部的Tomcat

    3  更方便的和各个第三方工具(mysql,redis,elasticsearch,dubbo,kafka等等整合),而只要维护一个配置文件即可。

    1.1.2 springbootssm的关系

    springboot整合了springmvc ,spring等核心功能。

    也就是说本质上实现功能的还是原有的spring ,springmvc的包,但是springboot单独包装了一层,这样用户就不必直接对springmvc, spring等,在xml中配置。

    1.1.3  没有xml我们要去哪配置

    1)  springboot实际上就是把以前需要用户手工配置的部分,全部作为默认项。除非用户需要额外更改不然不用配置。这就是所谓的“约定大于配置”

    2)  如果需要特别配置的时候,去修改application.properties  (application.yml)

    1.2 快速搭建

    1.2.1 新建module

    在project下增加一个Module,选择Spring Initializr

     

    目前企业中普遍选择2.1.16,不推荐选择2.2.x

     

     

     1.2.2  pom.xml

    
    

     1.2.3 controller

    @Controller
    public class Demo1Controller {
        @ResponseBody
        @RequestMapping("testDemo")
        public String testDemo(){
            return "hello demo";
        }
    }

    1.2.4 main方法启动tomcat

    在程序中直接找到XXXXXApplication这个类

    1.2.6  修改端口号

    resources目录下的application.properties 加入

    server.port=8082

    1.3 springboot整合kafka

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.13.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.atguigu.gmall0105</groupId>
        <artifactId>gmall0105-logger</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>gmall0105-logger</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <skipTests>true</skipTests>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.68</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.kafka</groupId>
                <artifactId>spring-kafka</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.kafka</groupId>
                <artifactId>spring-kafka-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    1.3.1 application.propeties

    server.port=8082
    #============== kafka ===================
    # 指定kafka 代理地址,可以多个
    spring.kafka.bootstrap-servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
    
    
    # 指定消息key和消息体的编解码方式
    spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
    spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

    更改为如下结构

    1.3.2 Gmall0105LoggerApplication

    package com.atguigu.gmall0105.logger.app;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.ComponentScan;
    
    @SpringBootApplication
    @ComponentScan(basePackages = "com.atguigu.gmall0105.logger.controller")
    public class Gmall0105LoggerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(Gmall0105LoggerApplication.class, args);
        }
    
    }

    1.3.3  LoggerController

    package com.atguigu.gmall0105.logger.controller;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import lombok.extern.slf4j.Slf4j;
    import org.slf4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.kafka.core.KafkaTemplate;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.UUID;
    
    
    //@RestController  //@RestController = @Controller + @ResponseBody
    @RestController
    @Slf4j
    public class LoggerController {
        // @ResponseBody  决定方法的返回值是 网页 还是 文本
        //@Slf4j 会帮你补充log的声明 和 实现 的 代码
    
        @Autowired
        KafkaTemplate kafkaTemplate;
    
        @RequestMapping("/applog")
        public String  applog(@RequestBody  String logString  ){
            //1 输出日志
            System.out.println(logString);
            log.info(logString);
    
            // 分流
            JSONObject jsonObject = JSON.parseObject(logString);
            if(jsonObject.getString("start")!=null&&jsonObject.getString("start").length()>0){
                //启动日志
                kafkaTemplate.send("GMALL_STARTUP_0105",logString);
            }else{
                //事件日志
                kafkaTemplate.send("GMALL_EVENT_0105",logString);
            }
    
            return logString;
        }
    
    
    
    
    }

    1.3.4 logback.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <property name="LOG_HOME" value="/opt/applog/gmall0105" />
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/app.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            </rollingPolicy>
            <encoder>
                <pattern>%msg%n</pattern>
            </encoder>
        </appender>
    
    
        <!-- 将某一个包下日志单独打印日志 -->
        <logger name="com.atguigu.gmall0105.logger.controller.LoggerController"
                level="INFO" additivity="false">
            <appender-ref ref="rollingFile" />
            <appender-ref ref="console" />
        </logger>
    
        <root level="error" additivity="false">
            <appender-ref ref="console" />
        </root>
    
    </configuration>

    1.3.4创建对应的topic 

    kafka-topics.sh --create --topic GMALL_START --zookeeper hadoop1:2181,hadoop2:2181,hadoop3:2181     --partitions 4 --replication-factor 1

    1.3.5 启动Gmall0105LoggerApplication  启动日志Mock的生成类

    kafka进行测试

    /bigdata/kafka_2.11-0.11.0.2/bin/kafka-console-consumer.sh --bootstrap-server  hadoop1:9092,hadoop2:9092,hadoop3:9092 --topic  GMALL_START 

    本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/13654712.html

  • 相关阅读:
    链表(一):链表简介
    PLSQL_性能优化系列14_Oracle High Water Level高水位分析
    PLSQL_性能优化系列13_Oracle Index Rebuild索引重建
    PLSQL_性能优化系列12_Oracle Index Anaylsis索引分析
    PLSQL_性能优化系列11_Oracle Bulk Collect批处理
    PLSQL_性能优化系列10_Oracle Array数据组优化
    PLSQL_性能优化系列09_Oracle Partition Table数据分区表
    PLSQL_性能优化系列08_Oracle Insert / Direct Insert性能优化
    PLSQL_性能优化系列07_Oracle Parse Bind Variables解析绑定变量
    PLSQL_批量压缩表Table Compress(案例)
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13654712.html
Copyright © 2011-2022 走看看