kafka window平台学习笔记(一)

下载地址
http://kafka.apache.org/downloads.html
参考文档
http://kafka.apache.org/documentation/

kafka依赖zookeeper,先启动zookeeper在启动kafka

1 .D:\kafka_2.12-2.6.0\config 文件夹下修改文件

zookeeper.properties 找到并编辑dataDir=D:/Tool/zookeeper-3.4.13/tmp (可以自定义文件夹)

server.properties  找到并编辑log.dirs=D:\Tool\kafka_2.11-2.1.1\kafka-log, (自定义文件夹)
找到并编辑zookeeper.connect=localhost:2181。表示本地运行(默认的可以不改)

 Kafka会按照默认,在9092端口上运行,
 并连接zookeeper的默认端口:2181。

启动zookeeper服务端

zookeeper-server-start.bat  ..\..\config\zookeeper.properties

启动zookeeper客户端

zookeeper-shell.bat localhost:2181

启动kafka

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

创建topic test

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

或者,您也可将代理配置为:在发布的topic不存在时,自动创建topic,而不是手动创建。

创建生产者产生消息

kafka-console-producer.bat --broker-list localhost:9092 --topic test2

创建消费者接收消息

从头消费
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
固定位置消费
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test2 --consumer-property group.id=group1

通过添加–consumer-property group.id=group1指定消费组为group1

查看topic

 ./kafka-topics.bat --list --zookeeper localhost:2181
 ./kafka-topics.bat --describe --zookeeper localhost:2181

删除主题

查看消费者位置:
在这里插入图片描述

 //kafka-run-class.bat kafka.tools.ConsumerOffsetChecker --zkconnect localhost:2181  --group group1
 查看固定分组的消费情况
kafka-consumer-groups.bat --describe --bootstrap-server localhost:9092  --group group1
看消费组的消费者情况,可以看到下图,有一个消费者是没有对应的partition的,所以它就拉取不到消息

php连接kafka 生产和消费
参考资料:
https://www.cnblogs.com/lz0925/p/11280654.html

消费者组中的消费者实例个数不能超过分区的数量。

当分区数量是3,而消费者数量是4的时候,会有一个消费者拉取不到任何消息

kafka日志中消息的存储情况。

kafka-run-class.bat kafka.tools.DumpLogSegments  --files  ..\..\kafka-logs\test2-0\00000000000000000000.log  --print-data-log

查看消费位移offset
使用kafka的bin目录下面的kafka-consumer-groups.sh命令可以查看offset消费情况,注意,如果你的offset是存在kafka集群上的,就指定kafka服务器的地址bootstrap-server:

/kafka-consumer-groups.bat --bootstrap-server localhost:9092   --describe --group group1

按照指定的offset进行消费数据:

./kafka-console-consumer.sh --bootstrap-server master:9092 --topic mytest --consumer-property group.id=group_mytest --offset 8 --partition 0

java消费 进入zookeeper查看,发现有group_mytest这个消费组对于mytest主题各分区的消费位移信息了

ls /consumers/group_mytest/offsets/mytest/0
get /consumers/group_mytest/offsets/mytest/0

首先来说说消费者如果是根据javaapi来消费,也就是【kafka.javaapi.consumer.ConsumerConnector】,我们会配置参数【zookeeper.connect】来消费。这种情况下,消费者的offset会更新到zookeeper的【consumers/{group}/offsets/{topic}/{partition}】目录下,例如:

 get /kafka/consumers/zoo-consumer-group/offsets/my-topic/0

如果是根据kafka默认的api来消费,即【org.apache.kafka.clients.consumer.KafkaConsumer】,我们会配置参数【bootstrap.servers】来消费。而其消费者的offset会更新到一个kafka自带的topic【__consumer_offsets】下面,查看当前group的消费进度,则要依靠kafka自带的工具【kafka-consumer-offset-checker】
上面结果的说明:

kafka-consumer-groups.bat --bootstrap-server localhost:9092   --describe --group group1

Group : 消费者组
Topic : topic的名字
Pid : partition的ID
Offset : kafka消费者在对应分区上已经消费的消息数【位置】
logSize : 已经写到该分区的消息数【位置】
Lag : 还有多少消息未读取(Lag = logSize - Offset)
Owner : 分区创建在哪个broker

offset更新的方式,不区分是用的哪种api,大致分为两类:

自动提交,设置enable.auto.commit=true,更新的频率根据参数【auto.commit.interval.ms】来定。这种方式也被称为【at most once】,fetch到消息后就可以更新offset,无论是否消费成功。
手动提交,设置enable.auto.commit=false,这种方式称为【at least once】。fetch到消息后,等消费完成再调用方法【consumer.commitSync()】,手动更新offset;如果消费失败,则offset也不会更新,此条消息会被重复消费一次。

查看帮助:
直接敲命令不带参数
在这里插入图片描述

总结
通过以上的步骤,可以查看到消息的推送到broker的日志文件,查看消息推送的内容、offset和时间等信息。另外,可以我们也查看到消息端读取消息的offset位置。能够更深入的了解kakfa的工作原理。

Kafka将topic划分为多个partition进行存储拥有两个好处:

消息存储扩容。一个文件的存储大小是有限的,但在集群中的多个文件的存储就可以大大增加一个topic能够保存的消息数量。
并行读写。通过多个partition文件存储消息,意味着producer和consumer可以并行的读写一个topic。
Consumer消费消息时,通过指定的offset来定位下一条要读取的消息。值得注意的是,offset的维护是由Consumer全权控制的。Kafka集群只负责根据Consumer传入的offset来返回对应的消息。如下图所示:

Kafka不会立刻删除已经被消费的消息,它会根据broker中的配置来决定多久清理一次。当broker中配置的时间到达时,不论消息是否被消费,Kafka都会清理磁盘空间。

最后,Kafka只能够保证消息再一个分区内的消费是有序的。无法保证一个topic下(拥有多个分区)所有的消息消费都是有序的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值