简介
kafka是一个分布式的流媒体平台
应用:消息系统、日志收集、用户行为追踪、流式处理。
特点
- 高吞吐量
处理数据能力强,能处理TB级的海量数据 - 消息持久化
把数据存在硬盘里,硬盘价格低且空间大(处理海量数据);
对硬盘顺序读取,效率是很高的。 - 高可靠性
分布式的服务器,可以做集群部署 - 高可扩展性
服务器不够用了,加一个服务器,只需要简单配置一下。
术语
- Broker:kafka服务器,集群中的每一个服务器,称为一个broker
- 可以使用zookeeper管理集群
- 发布-订阅模式,生产者把消息放到某个位置,可以有多个消费者订阅这个位置,读取消息,这时消息可以被多个消费者同时或先后读到。
- Topic:kafka使用的是发布定于模式,生产者把消息发布的位置,称为Topic。
- partition:把一个Topic分为多个分区
- offset:消息在分区内存放的索引,生产者在队尾写入消息,消费者按索引去读。
- 副本
kafka是一个分布式的消息引擎,为了让数据更可靠,每一个分区会有多个副本。
Leader Replica(主副本): 当消费者从分区获取数据时,主副本可以处理这个请求,做出响应。
Follower Replica(随从副本): 只是备份而已,但当主副本挂掉时,会从多个从副本中选一个做主副本。
使用
- 配置
zookeeper.properties
修改数据存放路径(你想存哪就写哪)
dataDir=e:/javawork/zookeeper
server.properties
kafka日志文件存放的位置
log.dirs=e:/javawork/kafka-logs
常用命令介绍
http://kafka.apache.org/documentation/#quickstart
使用kafka自带的zookeeper,启用zookeeper,使用zookeeper.properties配置文件。
D:\kafka_2.12-2.4.0>bin\windows\zookeeper-server-start.bat config\zookeeper.properties
启动kafka
D:\kafka_2.12-2.4.0>bin\windows\kafka-server-start.bat config\server.properties
创建topic test,服务器为localhost:9092,1副本,1分区
D:\kafka_2.12-2.4.0\bin\windows>kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
验证是否创建成功
D:\kafka_2.12-2.4.0\bin\windows>kafka-topics.bat --list --bootstrap-server localhost:9092
往主题上发送消息,调用kafka-console-producer.bat
kafka-console-producer.bat --broker-list localhost:9092 --topic test
在这个窗口发消息
再开一个窗口接收消息
D:\kafka_2.12-2.4.0\bin\windows>kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
关闭
D:\kafka_2.12-2.4.0\bin\windows>zookeeper-server-stop.bat
D:\kafka_2.12-2.4.0\bin\windows>kafka-server-stop.bat
不要暴力关闭窗口!
易报错点
1.启动zookeeper报错
D:\kafka_2.12-2.4.0\bin\windows>zookeeper-server-start.bat config\zookeeper.properties
[2020-05-22 22:10:16,197] INFO Reading configuration from: config\zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2020-05-22 22:10:16,200] WARN config\zookeeper.properties is relative. Prepend .\ to indicate that you're sure! (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2020-05-22 22:10:16,201] ERROR Invalid config, exiting abnormally (org.apache.zookeeper.server.quorum.QuorumPeerMain)
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing config\zookeeper.properties
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:154)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:113)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Caused by: java.lang.IllegalArgumentException: config\zookeeper.properties file is missing
at org.apache.zookeeper.server.util.VerifyingFileFactory.doFailForNonExistingPath(VerifyingFileFactory.java:51)
at org.apache.zookeeper.server.util.VerifyingFileFactory.validate(VerifyingFileFactory.java:45)
at org.apache.zookeeper.server.util.VerifyingFileFactory.create(VerifyingFileFactory.java:40)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:139)
... 2 more
Invalid config, exiting abnormally
这是因为zookeeper-server-start.bat在bin\windows目录下,但zookeeper.properties在config目录下,而不是bin\windows目录下,所以在这个bin\windows目录下找不到zookeeper.properties而报错。
正确写法:
D:\kafka_2.12-2.4.0>bin\windows\zookeeper-server-start.bat config\zookeeper.properties
启动kafka报错
如果暴力关闭kafka窗口,则下次启动时会报错。因为这种暴力关闭方式很有可能导致kafka无法完成对日志文件的解锁,再次启动kafka时,会提示日志文件被锁,无法成功启动。
解决方法
将kafka日志文件全部删除,再次启动即可。