實時電商數倉(三)之資料採集(二)搭建日誌採集系統的叢集(一)子模組:日誌採集模組 logger --(單機開發除錯)
阿新 • • 發佈:2020-09-11
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 springboot和ssm的關係
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