Golang: используйте сараму для доставки задач кафке

Привыкайте писать вместе! Это 11-й день моего участия в «Ежедневном новом плане Nuggets · Апрельское задание по обновлению»,Нажмите, чтобы просмотреть сведения о событии

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

Используйте сараму для доставки задач кафке

предисловие

Когда я пойму своего зоопарка и кафку и успешно их запущу. Вы можете попробовать доставить задачи в процесс kafka.Здесь используется язык программирования golang и задействованная библиотека golang: github.com/Shopify/sarama. saramaэто клиентская библиотека golang, которая слушает apache kafka.

кафка-старт-windows.png

скачать Сараму

команда загрузкиgo get github.com/Shopify/sarama

Если есть ошибка, вы можете попробовать изменить агент go, в командной строке:

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

Если это другие ошибки, попробуйте вставить сообщение об ошибке Baidu.

Запустите среду кафки

  1. работник зоопарка

    Войдите в каталог распаковки zookeeper, запустите соответствующую систему, запустите систему zkServerwin и запустите bin/zkServer.cmdсистему linux zkServer.sh. Kafka должен полагаться на zookeeper для запуска, поэтому zookeeper должен быть запущен первым

  2. кафка

Также войдите в каталог распаковки kafka и запустите соответствующую службу, чтобы указать файл конфигурации службы. Запустить под win (под корневой директорией распаковки): bin/windows/kafka-server-start.bat config/server.properties, файлы под linux находятся вbin/zookeeper-server-start.sh config/server.properties

Запустите потребителя кафки, чтобы принимать задачи

Войдите в каталог kafka bin, запустите соответствующие kafka-console-consumerфайлы в соответствии с системой, win находится в bin/windows/, linux в bin/. Операция должна вывести 连接地址сумму topic号, следующий пример, темаshopping

кафка-потребитель-старт-windows.png

Он заблокируется после запуска, и тогда мы сможем поставить задачу.

иди писать код

Обзор шагов:

  1. Определить конфигурацию кафки
  2. Создайте структуру сообщения
  3. подключиться к кафке
  4. Послать сообщение

Определить конфигурацию кафки

Класс конфигурации можно получить через sarama.NewConfig(). Есть две основные вещи для инициализации, 1. Выбрать раздел, 2. Установить возврат канала после успешной доставки. Не забудьте импортировать сарама.

/*记得引入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
复制代码

Создайте структуру сообщения

Та же самая сарама определила структуру, а Тема и Значение (конкретные значения) должны быть назначены следующим образом:

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

подключиться к кафке

Используйте sarama.NewSyncProducerдля передачи файла конфигурации. Открытое соединение и близкое соединение должны быть сопряжены

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

Отправить сообщение (задача доставки)

client.SendMessage(msg)Есть 3 возвращаемых значения, первое — это раздел, в котором находятся данные, второе — смещение данных, а третье — сообщение об ошибке, ошибка не возвращается.nil

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

полный код

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)
    }
}
复制代码

Запустите код, чтобы увидеть эффект

go-kafka-run.png

конец

рекомендация

отjuejin.im/post/7085350908690857998