kafka安装配置

1、 首先从官网下载对应的kafka版本:http://kafka.apache.org/downloads 

2、解压对应包,配置如下

3、 由于kafka依赖zookeeper(提供选举服务、配置维护、域名服务、分布式同步、组服务等),首先启动zookeeper

     进入windows目录,启动命令行,指定zookeeper的配置文件路径为父目录下的zookeeper.properties:zookeeper-server-start.bat ../../config/zookeeper.properties

 

或下载独立的zookeeper:http://apache.fayea.com/zookeeper/

下载后:

其中bin则为二进制启动文件夹,config则为zookeeper的配置文件目录,其中的zoo_sample.cfg文件即为默认的zoo.cfg默认参数的配置文件,启动zookeeper:

在windows下启动:

zkServer.sh start

一直启动后就消失,看来是有错误了,在bin下生成的:zookeeper.out文件中描述:

错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain

针对这个问题,在网上搜索资料,都没有具体到为,也无法解决,但看到一个版本指明zookeeper与本地JDK版本冲突,问题是kafka中的zookeeper能正常启动,查看了本地2181端口,发现没有被占用,使用如下命令:

zkServer.cmd

还是无法启动,最后直接将环境变量JAVA_HOME干掉,然后在运行zkServer.cmd 提示JAVA目录没有设置,想必是我刚删除了JAVA_HOME变量,于是我有重新添加JAVA_HOME目录:

然后继续运行上命令,发现跑起来了,真TM奇怪:

 

顺便在这里总结一下zookeeper配置问题:

a.实际项目用的是Linux,用Windows较少,资料也少。
b.Zookeeper和本地JDK有冲突,可通过删除JAVA_HOME在启动使得报错,然后添加JAVA_HOME在重新启动,否则无法正常启动。
c.Zookeeper启动,需要配置conf目录下的zoo_sample.cfg,复制-粘贴-重命名为zoo.cfg一次就可以了。
d.Windows下启动,不需要带“start”参数,直接zkServer.cmd,真是够坑的。

 

4、启动多个kafka服务,这里我只有一台机器,所以只能用一台机器虚拟成2台服务

进入kafka目录:

 

由于一个broker使用一个配置文件(见config目录server.properties文件)

输入命令: 

kafka-server-start.bat ../../config/server.properties 启动第一个broker

拷贝server.properties,修改对应的broker的id,保证与第一个默认的broker的id(默认值为0)不冲突,且为正整数,然后修改第二个broker的监听端口为9093(第一个默认为9092),启动第二个broker:

kafka-server-start.bat ../../config/server2.properties  启动第二个broker

   

 

启动后:

5、创建topic

使用kafka-topics.bat创建topic(创建一个名为“test”只有一个分区,只有一个副本的Topic): 

kafka-topics.bat --create -zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

 

6、查看topic列表

运行list topic命令,可以看到Topic列表:kafka-topics.bat --list --zookeeper localhost:2181

如图所示:

列出了名为test的topic

 

7、模拟生产者发送消息

打开命令行输入:kafka-console-producer.bat --broker-list localhost:9092 --topic test

该命令含义:向broker list列表(这里只有localhost:9092, 9092为默认broker监听端口)的test的topic发送消息,回车后出现输入信息界面:

 

此时输入两条消息并回车(每一条消息一回车):

“nice to meet you, my name is lixx--”

“this is a second message from lixx--”

 

8、模拟消费者从kafka集群消费消息

使用kafka自带的消费者命令行kafka-console-consumer.bat 从kafka集群的test的topic消费数据:

kafka-console-consumer.bat -zookeeper localhost:2181 --topic test --from-beginning

以上指定zookeeper集群地址为localhost的2181端口,获取topic名为test,且从头开始消费(偏移量)

此时,我们可以看到消费到如上两条数据(顺序能得到保证):

 

9、删除topic

     删除topic只会删除zookeeper中的元数据,消息文件必须自己手动删除;

     输入命令: kafka-topics.bat --delete -zookeeper localhost:2181 --topic test  (从zookeeper为本机的kafka集群中删除主题名为test的主题)

    如果kafaka启动时加载的配置文件中server.properties没有配置delete.topic.enable=true,那么此时的删除并不是真正的删除,而是把topic标记为:marked for deletion

 

 此时你若想真正删除它,可以如下操作:

     (1)登录zookeeper客户端:命令:./bin/zookeeper-client

     (2)找到topic所在的目录:ls /brokers/topics

     (3)找到要删除的topic,执行命令:rmr /brokers/topics/【topic name】即可,此时topic被彻底删除。

 

10、kafka集群配置

 

     如上我们配置的为一个broker相关操作,集群与单机的配置差不多,只是listeners的配置需要改为集群服务的IP地址和采用的端口。配置broker集群也同刚才操作一样,只需要将kafka目录拷贝至其他机器,然后修改对应config下的配置文件即可

    操作如下:

 

a、将单机版的kafka 目录复制到其他几台电脑上。

b、修改每台电脑上的kafka 目录下的server.properties 文件。

     broker.id=1 (这个参数在kafka 的broker 集群中必须唯一,且为正整数)。

c、启动每台电脑上的kafka 即可

 

      同一台机器上虚拟多个broker,只需要拷贝配置文件server.properties,如命名为:server2.properties

 

 server.properties配置如下:

broker.id=0

listeners=PLAINTEXT://192.168.12.8:9092

port=9092

log.dirs=/tmp/kafka-logs

zookeeper.connect=localhost:2181

 

server2.properties配置如下:

 

broker.id=1

listeners=PLAINTEXT://192.168.12.8:9093

port=9093

log.dirs=/tmp/kafka-logs-2

zookeeper.connect=localhost:2181

 

备注:

 

(1)listeners一定要配置成为IP地址;如果配置为localhost或服务器的hostname,在使用Java发送数据时就会抛出异常,因为在没有配置advertised.host.name 的情况下,Kafka并没有像官方文档宣称的那样改为广播我们配置的host.name,而是广播了主机配置的hostname。远端的客户端并没有配置 hosts,所以自然是连接不上这个hostname的;

(2)listeners中的端口号必须与port的值一致

 

根据两个不同配置文件分别启动两个kafka的broker即可:

使用kafka-server-start.bat 和两个server.properties、server2.properties启动两个KafkaServer:

kafka-server-start.bat config/server.properties 

kafka-server-start.bat config/server2.properties

如,二个broker的id为1的启动截图:

启动两个broker之后,我们可以创建一个带2个副本的主题(只有2台机器,所以副本不能超过实际的机器数目):

 

kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 2 --partitions 1 --topic my-topic

 

 

 

运行"describe topics"命令知道每个节点的信息:

 

kafka-topics.bat --describe --zookeeper localhost:2181 --topic my-topic

 

 

 

如上结果:  topic名字my-topic , 分区数:1 副本数:2个 ,其中partition在broker0上, leader在为broker0 副本有0和1broker两个,正在服务的两个0和1机器;

 

leader:  负责处理消息的读和写,leader是从所有节点中随机选择的.
replicas:列出了所有的副本节点,不管节点是否在服务中.
isr:     是正在服务中的节点.

 

 

 

kafka配置文件示例:

#zookeeper.connect=192.168.1.8:2181,192.168.1.13:2181,192.168.1.16:2181
#zookeeper.connect=zkserver1.vko.cn:2181,zkserver2.vko.cn:2181,zkserver3.vko.cn:2181
zookeeper.connect=192.168.1.179:2181
metadata.broker.list=192.168.1.179:9092
#metadata.broker.list=kafka.server1.vko.cn:9092,kafka.server2.vko.cn:9092
 
#zookeeper.connect.timeout=15000
#zookeeper.session.timeout.ms=15000
#zookeeper.sync.time.ms=20000
#auto.commit.interval.ms=20000
#auto.offset.reset=smallest
#serializer.class=kafka.serializer.StringEncoder
#producer.type=async
#queue.buffering.max.ms=6000
 
group.id=llx
kafka.sellstat.topics=llx

 

11、C++生产或消费数据

关于c++集成kafka,apache有对应的c++库《librdkafka》库,使用cmake或里面自带的solution直接编译即可,但需要C++ 11以上的编译器,另外为了提高传输效率,可以结合谷歌的protobuffer进行协议封装,此处不在赘述;

 

https://mp.csdn.net/console/editor/html/77210136

 

快来成为我的朋友或合作伙伴,一起交流,一起进步!
QQ群:961179337
微信:lixiang6153
邮箱:lixx2048@163.com
公众号:IT技术快餐
更多资料等你来拿!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝壳里的沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值