Windows下zookeeper搭建kafka集群

原因:经过几天的配置,摸索,百度,终于将这个集群搞了出来。
网上的大多不是很详细,在这里特地记录一下,供自己以及其他需要这篇文章的人看
关于kafka的一些基本知识不在叙述
言归正传,开始进行。。
启动kafka以及创建生产者消费者命令
此处参考:https://blog.csdn.net/woshixiazaizhe/article/details/80610432
建议将localhost换成你的本机ip

     如遇到连接被拒绝,可以将防火墙关掉试一试
     kafka启动命令
     bin\windows\kafka-server-start.bat config\server.properties    
     创建主题topic,topic = demo
     bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
     查看创建的topic
     bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
     启动生产者 producer
     bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic demo
     启动消费者 customer
     bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic demo --from-beginning

一、下载zookeeper

1、我这里下的版本是3.55的解压版。解压后目录结构大概是。
在这里插入图片描述
2、打开conf,进行我们一些必要的配置
双击打开里面的zoo.cfg
关于这些参数的解释,推荐大家移步这里
https://blog.csdn.net/kingmax54212008/article/details/83380545

                    # The number of milliseconds of each tick
					tickTime=2000
					# The number of ticks that the initial 
					# synchronization phase can take
					initLimit=10
					# The number of ticks that can pass between 
					# sending a request and getting an acknowledgement
					syncLimit=5
					# the directory where the snapshot is stored.
					# do not use /tmp for storage, /tmp here is just 
					# example sakes.
					dataDir=C:/DEVELOP/zk_kafka/zoo_logs/zk1_logs
					# the port at which the clients will connect
					clientPort=2181
					# the maximum number of client connections.
					# increase this if you need to handle more clients
					#maxClientCnxns=60
					#
					# Be sure to read the maintenance section of the 
			        # administrator guide before turning on autopurge.
			        # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
					# The number of snapshots to retain in dataDir
					#autopurge.snapRetainCount=3
					# Purge task interval in hours
					# Set to "0" to disable auto purge feature
					#autopurge.purgeInterval=1
					server.1=192.168.0.152:28881:38881
					server.2=192.168.0.152:28882:38882
					server.3=192.168.0.152:28883:38883

在这里我们需要注意的点就是 clientPort dataDir
上面的格式我们可以简单的总结为 server.num=B:C:D。
num:是正整数代表的服务的唯一标识。这个要和后面说道的myid文件保持一致。
B: 标识Zookeeper集群中某一个服务的ip或者域名 192.168.1.130
C:表示server.num这个服务于集群中leader进行信息交流的端口。在kafka中我们leader和follower需要进行数据备份。具体服务就是通过这个地方制定的端口进行通信的。
D:表示万一leader宕机了,我们就通过这个端口来进行再follower中选举新的leader。

3、将我们配置好的zookeeper复制三份,在这里我的日志文件也分为了三份,分别定义成了zk1_logs,zk2_logs,zk3_logs
注意:我们需要在日志目录下,也就是你在上面定义的 dataDir文件夹下面创建myid文件
分别是你在上面所配置的server.1 里面的1,
新建txt文档,将所对应的的 服务号(如1)存入txt文档,然后将txt后缀去掉

4、将以上工作完成后,配置完相应的环境变量,每一个复制的zookeeper都需要建一个环境变量,JDK的安装以及环境变量的配置则不在本次安装过程中,需要的话,自行百度,完成后,即可启动zookeeper,双击打开 bin目录下面的zkServer.cmd
注意 如果在这里又闪退现象,则需要用编辑模式打开,在配置的最后加上 pause
即可知道错误原因,
5、到了这里,zookeeper已经可以启动了,在启动的时候,可能会报错误,是因为在你启动一个的时候,会去连接另外两个,当每一个都启动的时候,错误消失。
附两张图片
在这里插入图片描述
全部启动完成以后
在这里插入图片描述

二、下载kafka,我这里下载的是kafka_2.11-1.1.0解压版
解压目录如下
在这里插入图片描述
这里修改一下config里面的配置
打开server.properties
配置如下,在这里只写几个关键点,其余的暂时不用管

    broker.id要保持唯一,一会需要复制三份
    broker.id=1
	port=9091
    host.name=192.168.0.152
    日志配置
    log.dirs=C:/DEVELOP/zk_kafka/kafka_logs/ka1_logs
    在上面所配置的zookeeper连接
    zookeeper.connect=192.168.0.152:2181,192.168.0.152:2182,192.168.0.152:2183

到这里将kafka复制三份以后,将以上主要配置修改完成以后,执行文章最上面的命名,既可启动kafka
如果报错,出现找不到jdk什么的
在这里建议打开bin目录下面的Windows里面的kafka-run-class.bat

将里面的set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% 
%KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%"
找到这句,将里面的classpath 加上双引号,就可以了

到了这一步,应该都可以全部启动成功了
附几张启动过程中的图,想看就看一下,不看就直接略过就好了

启动kafka
在这里插入图片描述
创建topic
topic创建
生产者
在这里插入图片描述
消费者
在这里插入图片描述
在上面的图片里可以看到,我们虽然在2181端口创建的topic,在2183端口里面里面也可以看到
如果做到了这一步,那么恭喜你,已经成功了

三、整合springboot
新建一个springboot项目
在pom.xml文件中添加下面的依赖

       <dependency>
			<groupId>org.springframework.kafka</groupId>
			<artifactId>spring-kafka</artifactId>
			<version>2.1.10.RELEASE</version>
		</dependency>
		下面这个不加应该也是可以的
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka-streams</artifactId>
			<version>1.0.2</version>
		</dependency>

yml文件配置

spring:
  kafka:
     # kafka服务器地址(可以多个)
    bootstrap-servers: 192.168.0.152:9091,192.168.0.152:9092,192.168.0.152:9093
    consumer:
          # 指定一个默认的组名
          group-id: kafka2
          # earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
          # latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
          # none:topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
          auto-offset-reset: earliest
          # key/value的反序列化
          key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
          value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
        producer:
          # key/value的序列化
          key-serializer: org.apache.kafka.common.serialization.StringSerializer
          value-serializer: org.apache.kafka.common.serialization.StringSerializer
          # 批量抓取
          batch-size: 65536
          # 缓存容量
      # 服务器地址
      bootstrap-servers: 192.168.0.152:9091,192.168.0.152:9092,192.168.0.152:9093
server:
  port: 7070

新建 KafkaController
这里参考https://blog.csdn.net/AkiraNicky/article/details/86562444

package com.zeshan.kafkaconsumer;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class KafkaController {

    /**
     * 注入kafkaTemplate
     */
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    /**
     * 发送消息的方法
     *
     * @param key
     *            推送数据的key
     * @param data
     *            推送数据的data
     */
    private void send(String key, String data) {
        // topic 名称 key data 消息数据
        kafkaTemplate.send("test1", key, data);

    }

    // test 主题 1 my_test 3

    @RequestMapping("/kafka")
    public String testKafka() {
        int iMax = 15;
        for (int i = 12; i < iMax; i++) {
            send("key" + i, "data" + i);
        }
        return "success";
    }

    /**
     * 消费者使用日志打印消息
     */
    @KafkaListener(topics = "test1")
    public void receive(ConsumerRecord<?, ?> consumer) {
        System.out.println("topic名称:" + consumer.topic()
                + ",key:" + consumer.key() + ",分区位置:" + consumer.partition()
                + ", 下标" + consumer.offset()+ ",数值"+consumer.value());
    }
}

到这里应该就差不多了,感谢上面我所参考的,在配置的过程中,每个人遇到的问题都不一样,要学会自己独立解决问题,
有什么问题,大家可以在下面讨论,如果帮到你了,就点个赞吧!如果没帮到,emmmmm,打扰了!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值