¡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
. sarama
es una biblioteca cliente de golang que escucha apache kafka.
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
-
cuidador del zoológico
Ingrese al directorio de descompresión de zookeeper, ejecute el sistema correspondiente, ejecute el
zkServer
sistema win y ejecutebin/zkServer.cmd
el sistema linuxzkServer.sh
. Kafka necesita confiar en zookeeper para comenzar, por lo que zookeeper debe iniciarse primero -
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 bin
directorio kafka, ejecute los kafka-console-consumer
archivos 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
Se bloqueará después del inicio y luego podremos entregar la tarea.
ir a escribir código
Descripción general de los pasos:
- Definir la configuración de kafka
- Construir la estructura del mensaje.
- conectarse a kafka
- 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.NewSyncProducer
para 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)
}
}
复制代码