1. 程式人生 > 實用技巧 >實時電商數倉(三)之資料採集(二)搭建日誌採集系統的叢集(一)子模組:日誌採集模組 logger --(單機開發除錯)

實時電商數倉(三)之資料採集(二)搭建日誌採集系統的叢集(一)子模組:日誌採集模組 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.3,不推薦選擇2.2.x

1.2.2 pom.xml

<?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.gmall2020</groupId> <artifactId>gmall2020-logger</artifactId> <version>0.0.1-SNAPSHOT</version> <name>gmall2020-logger</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <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>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.56</version> </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.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=80

1.3 springboot整合kafka

1.3.1 application.propeties

#============== kafka ===================
# 指定kafka 代理地址,可以多個
spring.kafka.bootstrap-servers=hadoop1: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 LogJsonController

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class LoggerController {

    @Autowired
    KafkaTemplate kafkaTemplate;


    @RequestMapping("/applog")
    public String applog(@RequestBody JSONObject jsonObject){
        String logJson = jsonObject.toJSONString();
        log.info(logJson);
        if(jsonObject.getString("start")!=null){
            kafkaTemplate.send("GMALL_START",logJson);
        }else{
            kafkaTemplate.send("GMALL_EVENT",logJson);

        }
 
        return "success";
    }


}

1.3.3 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="/applog/gmall2020" />
    <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.gmall2020.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 啟動LoggerApplication 啟動日誌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