Kafka和Zookeeper的配置

1.项目架构

kafka:
在这里插入图片描述
可以用zookeeper管理Kafka集群
zookeeper:
1)服务注册发现
2)分布式锁
启动服务
执行命令zkServer

$zkServer 
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Usage: ./zkServer.sh {
    
    start|start-foreground|stop|restart|status|upgrade|print-cmd}

$ zkServer  status
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Error contacting service. It is probably not running.

$ zkServer  start
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

查看zookeeper运行及状态
安装后,可以看到zookeeper提供了zkCli等工具进行.

$zkCli
Connecting to localhost:2181

Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2181(CONNECTING) 0] 
[zk: localhost:2181(CONNECTING) 0] 
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0] ls
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 2] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 3] ls /zookeeper/quota
[]
[zk: localhost:2181(CONNECTED) 4] 

kafka配置
启动kafka
kafka依赖zookeeper,而kafka中默认已有一个单机版的zookeeper供使用(实际生产环境中不推荐使用默认的zookeeper)
开启zookeeper
cd到kafka的安装目录下:

cd /usr/local/Cellar/kafka/2.7.0

执行脚本启动zookeeper:

bin/zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties

/usr/local/etc/kafka/zookeeper.properties 是zookeeper的配置文件,启动成功如下图:
在这里插入图片描述
启动kafka
再打开一个控制窗口,cd到kafka的安装目录下

cd /usr/local/Cellar/kafka/2.1.0

执行脚本启动kafka:

bin/kafka-server-start /usr/local/etc/kafka/server.properties

测试:
首先创建一个主题(topic)
再打开一个控制窗口,cd到kafka的安装目录下

cd /usr/local/Cellar/kafka/2.1.0

执行命令,创建一个主题

bin/kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

–create 创建主题命令
–zookeeper localhost:2181 指定zookeeper
–replication-factor 1 指定副本个数
–partitions 1 指定分区个数
–topic test 主题名称为“test”

查看是否成功创建主题

bin/kafka-topics --list --zookeeper localhost:2181

测试生产者(producer)与消费者(consumer)
打开一个窗口输入命令创建一个生产者:

bin/kafka-console-producer --broker-list localhost:9092 --topic test

打开一个窗口输入命令创建一个消费者:

kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning

使用生产者发送消息,消费者接受消息
在这里插入图片描述

2.kafka发送数据

package main
import (
"fmt"
"github.com/Shopify/sarama"
)
// 基于sarama第三⽅库开发的kafka client
func main() {
    
    
config := sarama.NewConfig()
tailf包使⽤
config.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要
leader和follow都确认
config.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出⼀个
partition
config.Producer.Return.Successes = true // 成功交付的消息
将在success channel返回
// 构造⼀个消息
msg := &sarama.ProducerMessage{
    
    }
msg.Topic = "web_log"
msg.Value = sarama.StringEncoder("this is a test log")
// 连接kafka
client, err := sarama.NewSyncProducer([]string{
    
    "192.168.1.7:9092"},
config)
if err != nil {
    
    
fmt.Println("producer closed, err:", err)
return
}
defer client.Close()
// 发送消息
pid, offset, err := client.SendMessage(msg)
if err != nil {
    
    
fmt.Println("send msg failed, err:", err)
return
}
fmt.Printf("pid:%v offset:%v\n", pid, offset) }

在/usr/local/var/lib/kafka-logs可以看到对应主题的log日志

3.tail包读取日志文件

把数据一行行读取出来以后,放到自己本身的channel里面
tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容 ,在日志收集中可以实时的监测日志的变化。

package main

import (
	"fmt"
	"github.com/hpcloud/tail"
	"time"
)

func main(){
    
    

	filename := `./xx.log`
	config := tail.Config{
    
    
		ReOpen: true,	//日志过大会自动切割
		Follow: true,
		Location: &tail.SeekInfo{
    
    Offset: 0, Whence: 2}, //打开这个文件从哪个地方开始读数据
		MustExist: false,  //允许日志不存在
		Poll: true,		//轮询方式
	}

	// 打开文件开始读取数据
	tails, err :=  tail.TailFile(filename, config)
	if err != nil {
    
    
		fmt.Println("tail %s failed, err:%v\n", filename, err)
		return
	}

	// 开始读取数据
	var (
		msg *tail.Line
		ok bool
	)
	for {
    
    
		msg, ok = <-tails.Lines // chan tail.Line
		if !ok {
    
    
			fmt.Printf("tail file close reopen, filename:%s\n",
				tails.Filename)
			time.Sleep(time.Second) // 读取出错等一秒
			continue
		}
		fmt.Println("msg:", msg.Text)
	}
}

4.配置文件解析

go-ini 用mapTo吧ini配置文件(类似yml)映射到结构体

猜你喜欢

转载自blog.csdn.net/qq_43378019/article/details/114295710