Kafka的架构:分布式消息系统,默认将消息存入磁盘,存储时间是7天。
Producer:消息的生产者,自己决定消息写往哪个partition,两种:1.hash,2.轮询
Broker:组建kafka集群的节点,broker之间没有主从关系,broker由zookeeper来协调,broker负责消息的读写,存储。每个broker可以管理多个partition。
Topic:一类消息的总称/消息队列/分类,由partition组成,有多少,创建可以指定
Partition:实际存储数据的地方,每个partition有副本,有多少?创建topic时可以指定,partition是直接接触磁盘,append追加消息,每个partition都有一个broker来管理。这个broker叫做这个partition的leader
Consumer:消息的消费者。每个consumer都有自己的消费者组。组与组之间消费同一个topic时,互不影响。同一个消费者组内的消费者同一个topic时,这个topic中同一条数据只能被消费一次。Consumer自己通过zookeeper来维护消费者的offset
Zookeeper:协调数据,存储元数据,broker,partition等
————————————————————————————————————————————————————————
Kafka和sparkstreaming整合:
用flume也可以接sparkstreaming
问题:
Flume------->sparkStreaming,sparkStreaming由于峰值的影响,之间有数据丢失,数据卡了,kafka起到了解耦和压力缓冲
是一个分布式的消息队列系统。
Kafka是零拷贝,就是不经过内存,直接写到磁盘的。,直接存起来.kafka有三种作用:解耦,缓冲,异步通信
生产者不丢数据,消费者不丢数据,永久保存
一般情况下没有峰值
Kafka的吞吐量很大,可以达到百兆每秒
Kafka后期可以给sparkstreaming提供很稳定的流输出,做了一个解耦
同时起到了压力峰值的缓冲
存消息队列的系统
Kafka是一个生产者,消费者队列系统,会保证自己不丢失数据,而且是一个分布式的,也有集群
Hash:基于(K,V)格式
轮询:先在一个partition中写,写一会儿,再去切换另一个部分。
Partition内部是强有序的。
Offset是生产者的偏移量
kafka会源源不断的提供数据
Kafka的架构:分布式消息系统,默认将消息存入磁盘,存储时间是7天。是一个分布式的,也就是有很多节点,保证自己不丢数据,消费者也不丢数据。
——————————————————————————————————————————————————————+
kafka启动时需要修改权限:
chmod +x startkafka.sh
启动:
./startkafka.sh
创建topic:
./kafka-topics.sh --zookeeper node01:2181,node02:2181,node03:2181 --create --topic t0730 2 --partitions 2 --replic
ation-factor 2
查看创建的节点:
./kafka-topics.sh --zookeeper node01:2181,node02:2191,node03:2181 --list
kafka集群的搭建:
- kafka集群搭建
- 上传kafka_2.10-0.8.2.2.tgz包到三个不同节点上,解压。
- 配置../ kafka_2.10-0.8.2.2/config/server.properties文件
节点编号:(不同节点按0,1,2,3整数来配置)
真实数据存储位置:
zookeeper的节点:
- 启动zookeeper集群。
- 三个节点上,启动kafka:
bin/kafka-server-start.sh config/server.properties |
最好使用自己写的脚本启动,将启动命令写入到一个文件:
nohup bin/kafka-server-start.sh config/server.properties > kafka.log 2>&1 &
脚本附件: (放在与bin同一级别下,注意创建后要修改权限:chmod 755 startkafka.sh) |
- 相关命令:
创建topic:
./kafka-topics.sh --zookeeper node3:2181,node4:2181,node5:2181 --create --topic topic2017 --partitions 3 --replication-factor 3 |
用一台节点控制台来当kafka的生产者:
./kafka-console-producer.sh --topic topic2017 --broker-list node1:9092,node2:9092,node3:9092 |
用另一台节点控制台来当kafka的消费者:
./kafka-console-consumer.sh --zookeeper node3:2181,node4:2181,node5:2181 --topic topic2017 |
查看kafka中topic列表:
./kafka-topics.sh --list --zookeeper node3:2181,node4:2181,node5:2181 |
查看kafka中topic的描述:
./kafka-topics.sh --describe --zookeeper node3:2181,node4:2181,node5:2181 --topic topic2017
注意:ISR是检查数据的完整性有哪些个节点。 |
查看zookeeper中topic相关信息:
启动zookeeper客户端: ./zkCli.sh 查看topic相关信息: ls /brokers/topics/ 查看消费者相关信息: ls /consumers |
- 删除kafka中的数据。
- :在kafka集群中删除topic,当前topic被标记成删除。
./kafka-topics.sh --zookeeper node3:2181,node4:2181,node5:2181 --delete --topic t1205 |
在每台broker节点上删除当前这个topic对应的真实数据。
读取写入的信息:
./kafka-console-consumer.sh --zookeeper node01:2181,no
de02:2181,node03:2181 --topic t0730 --from-beginning
分别去每台节点目录日志下删除日志文件:
[root@node02 kafka-logs]# rm -rf t0730-*
-
- :进入zookeeper客户端,删除topic信息
rmr /brokers/topics/t1205 |
-
- :删除zookeeper中被标记为删除的topic信息
rmr /admin/delete_topics/t1205 |
查看描述:
./kafka-topics.sh --zookeeper node01:2181,node02:2181,
node03:2181 --describe --topic t0730
————————————————————————————————————————————————————————
删除topic里面的数据
这里没有单独的清空数据的命令,这里要达到清空数据的目的只需要以下步骤:
一、如果当前topic没有使用过即没有传输过信息:可以彻底删除。
二、 如果当前topic有使用过即有过传输过信息:并没有真正删除topic只是把这个topic标记为删除(marked for deletion)。想要彻底删除topic数据要经过下面两个步骤:
①:删除topic,重新用创建topic语句进行创建topic
②:删除zookeeper中的consumer中的路径。
这里假设要删除的topic是test,kafka的zookeeper root为/kafka
删除kafka相关的数据目录
数据目录请参考目标机器上的kafka配置:server.properties -> log.dirs=/var/kafka/log/tmp
rm -r /var/kafka/log/tmp/test*
删除kafka topic
./kafka-topics.sh --zookeeper node3:2181,node4:2181,node5:2181 --delete --topic kfk
删除zookeeper相关的路径
(1)登录zookeeper客户端:命令:./bin/zookeeper-client
(2)找到topic所在的目录:ls /brokers/topics
(3)找到要删除的topic,执行命令:rmr /brokers/topics/【topic name】即可,此时topic被彻底删除。
另外被标记为marked for deletion的topic你可以在zookeeper客户端中通过命令获得:ls /admin/delete_topics/【topic name】,如果你删除了此处的topic,那么marked for deletion 标记消失
完成
重启zookeeper和kafka可以用下面命令查看相关的topic还在不在:
/home/kafka/bin/kafka-topics.sh --list --zookeeper HadoopMaster:2181/kafka