Привыкайте писать вместе! Это 11-й день моего участия в «Ежедневном новом плане Nuggets · Апрельское задание по обновлению»,Нажмите, чтобы просмотреть сведения о событии。
[使用sarama向kafka投递任务]()
[前言]()
[sarama的下载]()
[启动kafka环境]()
[启动一个kafka消费者接受任务]()
[go代码编写]()
[步骤总览]()
[完整代码]()
[运行代码,查看效果]()
复制代码
Используйте сараму для доставки задач кафке
предисловие
Когда я пойму своего зоопарка и кафку и успешно их запущу. Вы можете попробовать доставить задачи в процесс kafka.Здесь используется язык программирования golang и задействованная библиотека golang: github.com/Shopify/sarama
. sarama
это клиентская библиотека golang, которая слушает apache kafka.
скачать Сараму
команда загрузкиgo get github.com/Shopify/sarama
Если есть ошибка, вы можете попробовать изменить агент go, в командной строке:
go env -W GOPROXY=https://goproxy.cn
Если это другие ошибки, попробуйте вставить сообщение об ошибке Baidu.
Запустите среду кафки
-
работник зоопарка
Войдите в каталог распаковки zookeeper, запустите соответствующую систему, запустите систему
zkServer
win и запуститеbin/zkServer.cmd
систему linuxzkServer.sh
. Kafka должен полагаться на zookeeper для запуска, поэтому zookeeper должен быть запущен первым -
кафка
Также войдите в каталог распаковки 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
Он заблокируется после запуска, и тогда мы сможем поставить задачу.
иди писать код
Обзор шагов:
- Определить конфигурацию кафки
- Создайте структуру сообщения
- подключиться к кафке
- Послать сообщение
Определить конфигурацию кафки
Класс конфигурации можно получить через 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)
}
}
复制代码