20 días para aprender Spark (5) Streaming + kafka para implementar registros de usuarios en tiempo real

Un artículo para aprender a utilizar kafka+SpringBoot+sparkStreaming en un entorno de producción para realizar análisis y procesamiento de big data del comportamiento diario de los usuarios.

Nota: Este artículo es adecuado para desarrolladores que dominan el marco básico de Java y desean aprender big data.

Se recomienda recogerlo, de lo contrario será fácil encontrarlo.

Los datos procesados ​​​​por transmisión en el artículo anterior se utilizan principalmente para aprender algunos usos básicos de la transmisión. En entornos de producción reales, aún se requiere una recopilación de registros especial.

Dirección de descarga de Kafka && zookeeper: https://download.csdn.net/download/lihao1107156171/18254437

Dirección del código: https://gitee.com/lihao2/blog-code

En proyectos reales, si queremos realizar operaciones de procesamiento de big data, primero debemos obtener registros de usuario (los registros mencionados aquí se refieren a los registros de operaciones del usuario después de ingresar al software) y luego podemos procesarlos. Para garantizar que el funcionamiento de los registros de usuario no afecte el funcionamiento del software en general, debemos utilizar colas de mensajes para operaciones asincrónicas, de modo que el registro no afecte la eficiencia de toda la aplicación.

¿Qué es Kafka?

Kafka es una cola de mensajes distribuida. La llamada cola de mensajes es simplemente una aplicación responsable de enviar datos. La cola de mensajes envía datos (mensajes) a otra aplicación para mejorar el tiempo de respuesta de la aplicación.

Las colas de mensajes más utilizadas incluyen activeMQ, RabbitMQ, etc. Cada una de ellas tiene sus propias ventajas y características, por lo que no las describiremos una por una aquí. Explicamos principalmente a Kafka.

La mayor ventaja de Kafka es su alto rendimiento (en pocas palabras, procesa datos muy rápidamente), por lo que generalmente elegimos utilizar Kafka como sistema de recopilación de registros.

Instalar ZooKeeper

ZooKeeper es un servicio de coordinación de aplicaciones distribuidas de código abierto y distribuido. Kafka se basa en la coordinación de zookeeper, por lo que primero debemos instalar zookeeper. Tenga en cuenta aquí que también hay zookeeper en el paquete de instalación de kafka, y también puede usarlo.

1. Descomprima el paquete de instalación de Zookeeper.

2. Hay un archivo zkServer.cmd en el directorio bin, haga doble clic en él para ejecutarlo.

instalar kafka

1. Descargue y descomprima kafka_2.12-2.5.0

2. Ingrese al directorio \bin\windows, escriba cmd en la barra de direcciones para ingresar a la ventana de comandos y ejecute el comando kafka-server-start.bat server.properties. Asegúrese de habilitar zookeeper primero.

Escribe el proyecto SpringBoot para enviar Kafka.

Después de instalar Kafka, necesitamos un código de fondo como remitente del mensaje. Tenga en cuenta que el entorno del proyecto es un proyecto SpringBoot y primero debemos construir el entorno del proyecto SpringBoot.

Primero agregue la dependencia de Kafka en el archivo pom.

1. paquete de frasco

<!-- kafka -->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

2. Modifique el archivo application.yml en el proyecto y agregue la dirección kafka

server:
  port: 8089    #项目端口号
spring:
  kafka:
    producer:
      bootstrap-servers: 127.0.0.1:9092 # kafka地址

3. Comience a escribir el código del remitente (productor), ingrese a la capa del controlador del proyecto y cree la clase MsgController para recibir solicitudes de front-end y enviar datos a Kafka.

@RestController
public class MsgController {
    
    

    /* 发送kafka */
    @Autowired
    @SuppressWarnings("all")
    private KafkaTemplate<String, String> kafkaTemplate;

    @GetMapping("sendK")
    public String send(){
    
    
        // kafkaTemplate.send(消息名称,消息数据) // 向kafka发送消息
        // token~用户ID~用户点击商品ID~商品类别ID~操作时间
        String log = "zasdad~1~46~23~2021-04-15 09:04:00";
        kafkaTemplate.send("streaming",log);

        return "SUCCESS";
    }

}

Lo anterior es cómo el proyecto springBoot envía registros a Kafka. Resumir cómo utilizar

resumen

Abra el servicio primero, primero abra zk y luego abra ka;

Escritura de código, un paquete jar, dos configuraciones, tres usos

streamingreceivekafka

Después de enviar la información de registro al backend, debemos escribir Streaming para recibir el mensaje de Kafka. Primero, también configuramos el paquete jar en el archivo pom del proyecto original.

1. Pon el paquete del frasco.

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-kafka-0-10_2.12</artifactId>
    <version>2.4.4</version>
</dependency>

Una vez descargado el paquete jar, debe escribir el contenido principal del proyecto y procesar los registros enviados por kafka.

2. Crea una nueva clase y escribe el método principal.

  
  
  def main(args: Array[String]): Unit = {
    
    
    // StreamingContext(spark配置,时间间隔)
    val ssc = new StreamingContext(
      new SparkConf().setAppName("streaming")
        .setMaster("local[2]"),Seconds(10)
    )
    // 设置日志级别
    ssc.sparkContext.setLogLevel("ERROR")

    // 设置检查点
    ssc.checkpoint("./check_port")

    // 定义kafka的相关参数
    val kafkaParams = Map[String, Object](
      "bootstrap.servers" -> "127.0.0.1:9092",  // kafka位置
      "key.deserializer" -> classOf[StringDeserializer],
      "value.deserializer" -> classOf[StringDeserializer],
      "key.serializer" -> "org.apache.kafka.common.serialization.StringSerializer",
      "value.serializer" -> "org.apache.kafka.common.serialization.StringSerializer",
      "group.id" -> "spark", // 消费者组织ID
      "auto.offset.reset" -> "latest",
      "enable.auto.commit" -> (false: java.lang.Boolean))

	// 开始读取kafka中发送过来的数据
    val data = KafkaUtils.createDirectStream(
      ssc,LocationStrategies.PreferConsistent
      ,ConsumerStrategies
        .Subscribe[String,String](List("streaming"),kafkaParams)// (消息名称,kafka参数)
    )

    // 获得发送的值 打印
    data.map(_.value()).print()

    ssc.start()
    ssc.awaitTermination()

  }

Primero, ejecute el método principal de la clase de inicio en el proyecto springBoot. Después de un inicio exitoso, ejecute el método principal en la clase Streaming. Cuando accedamos a http://127.0.0.1:8089/sendK en el navegador, comenzaremos a acceder MsgController e ingrese el método send., y luego envíe el mensaje a kafka. El proyecto Streaming monitorea kafka en tiempo real, lee el mensaje en kafka y luego lo procesa.

Los registros enviados en el entorno de desarrollo son diversos y dinámicos, también existen clases de configuración especiales en streaming para configurar Kafka, aquí lo escribiremos de forma sencilla, centrándonos en la coordinación más sencilla entre múltiples software.

Usamos el código más simple para describir la tecnología central. Si cree que el artículo le resulta útil, dale me gusta.

Supongo que te gusta

Origin blog.csdn.net/lihao1107156171/article/details/116290249
Recomendado
Clasificación