Golang: use sarama para entregar tareas a kafka

¡Acostúmbrate a escribir juntos! Este es el día 11 de mi participación en el "Nuggets Daily New Plan · April Update Challenge",Haga clic para ver los detalles del evento

[使用sarama向kafka投递任务]()
    [前言]()
    [sarama的下载]()
    [启动kafka环境]()
    [启动一个kafka消费者接受任务]()
    [go代码编写]()
    [步骤总览]()
    [完整代码]()
    [运行代码,查看效果]()
复制代码

Usa sarama para entregar tareas a kafka

prefacio

Cuando entiendo a mi zookeeper y kafka, y los inicio con éxito. Puede intentar entregar tareas al proceso kafka. El lenguaje de programación utilizado aquí es golang, y la biblioteca golang involucrada es: github.com/Shopify/sarama. saramaes una biblioteca cliente de golang que escucha apache kafka.

kafka-start-windows.png

descarga de sarama

descargar comandogo get github.com/Shopify/sarama

Si hay un error, puede intentar cambiar el agente go, en la línea de comando:

go env -W GOPROXY=https://goproxy.cn

Si se trata de otros errores, intente pegar el mensaje de error Baidu.

Iniciar el entorno kafka

  1. cuidador del zoológico

    Ingrese al directorio de descompresión de zookeeper, ejecute el sistema correspondiente, ejecute el zkServersistema win y ejecute bin/zkServer.cmdel sistema linux zkServer.sh. Kafka necesita confiar en zookeeper para comenzar, por lo que zookeeper debe iniciarse primero

  2. kafka

Ingrese también al directorio de descompresión de kafka y ejecute el servicio correspondiente para especificar el archivo de configuración del servicio. Ejecutar bajo win (bajo el directorio raíz de la descompresión): bin/windows/kafka-server-start.bat config/server.properties, los archivos bajo linux están enbin/zookeeper-server-start.sh config/server.properties

Inicie un consumidor kafka para aceptar tareas

Ingrese al bindirectorio kafka, ejecute los kafka-console-consumerarchivos correspondientes según el sistema, win está en bin/windows/, linux está en bin/. La operación necesita traer la 连接地址suma topic号, el siguiente ejemplo, el tema esshopping

kafka-consumer-start-windows.png

Se bloqueará después del inicio y luego podremos entregar la tarea.

ir a escribir código

Descripción general de los pasos:

  1. Definir la configuración de kafka
  2. Construir la estructura del mensaje.
  3. conectarse a kafka
  4. Enviar un mensaje

Definir la configuración de kafka

La clase de configuración se puede obtener a través de sarama.NewConfig(). Hay dos cosas principales para la inicialización, 1. Seleccione la partición, 2. Configure el retorno del canal después de la entrega exitosa. Recuerda importar sarama.

/*记得引入sarama。 import("github.com/Shopify/sarama") */
config := sarama.NewConfig()
// 1. 初始化生产者配置
config.Producer.RequiredAcks = sarama.WaitForAll
// 选择分区
config.Producer.Partitioner = sarama.NewRandomPartitioner
// 成功交付的信息
config.Producer.Return.Successes = true
复制代码

Construir la estructura del mensaje.

El mismo sarama ha definido la estructura, y es necesario asignar el Tema y el Valor (valores específicos), de la siguiente manera:

// 2. 构造一个消息,结构体类型
msg := &sarama.ProducerMessage{
    Topic: "shopping",
    Value: sarama.StringEncoder("20220411happy03"),
}
复制代码

conectarse a kafka

Úselo sarama.NewSyncProducerpara pasar el archivo de configuración. La conexión abierta y la conexión cerrada deben estar emparejadas

// 3. 连接kafka
client, err := sarama.NewSyncProducer([]string{"127.0.0.1:9092"}, config)
if err != nil {
    fmt.Println(err)
}
defer client.Close()
复制代码

Enviar un mensaje (tarea de entrega)

client.SendMessage(msg)Hay 3 valores de retorno, el primero es la partición donde se encuentran los datos, el segundo es el desplazamiento de los datos y el tercero es el mensaje de error, no se devuelve ningún error.nil

// 4. 发送消息
partition, offset, err := client.SendMessage(msg)
fmt.Println("所在分区:")
fmt.Println(partition)
fmt.Println("数据偏移量:")
fmt.Println(offset)
if err != nil {
    fmt.Println(err)
}
复制代码

código completo

package main
​
import (
    "fmt"
    "github.com/Shopify/sarama"
)
​
func main() {
    config := sarama.NewConfig()
    // 1. 初始化生产者配置
    config.Producer.RequiredAcks = sarama.WaitForAll
    // 选择分区
    config.Producer.Partitioner = sarama.NewRandomPartitioner
    // 成功交付的信息
    config.Producer.Return.Successes = true
​
    // 2. 构造一个消息,结构体类型
    msg := &sarama.ProducerMessage{
        Topic: "shopping",
        Value: sarama.StringEncoder("20220411happy02"),
    }
​
    // 3. 连接kafka
    client, err := sarama.NewSyncProducer([]string{"127.0.0.1:9092"}, config)
    if err != nil {
        fmt.Println(err)
    }
    defer client.Close()
​
    // 4. 发送消息
    partition, offset, err := client.SendMessage(msg)
    fmt.Println("partition:")
    fmt.Println(partition)
    fmt.Println("offset:")
    fmt.Println(offset)
    if err != nil {
        fmt.Println(err)
    }
}
​
复制代码

Ejecute el código para ver el efecto.

go-kafka-run.png

fin

Supongo que te gusta

Origin juejin.im/post/7085350908690857998
Recomendado
Clasificación