大数据之Kafka技术详解
Kafka
文章适合新手了解Kafka的全过程。文章在编写过程中难免有疏漏和错误,欢迎大佬指出文章的不足之处;更多内容请点进👉 Lino_White 👈查看。
未来的世界充满着各式各样的数据,我们该怎么好好利用起来呢?开启《大数据之Kafka技术详解(一)》正文吧~~~
1、Kafka简答
(1)Kafka是什么?
Kafka是一种高吞吐量,分布式的基于发布/订阅模式的消息队列(MQ,Message Queue)系统,主要应用于大数据实时数据领域。
在网页浏览,搜索和其他用户的行动等数据,通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。
对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案,所以在搭配方面可以跟Flume一起使用。
Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
(2)Kafka有什么用?
解耦、可恢复性、缓冲、灵活性&峰值处理能力、冗余、异步通信、顺序保证。
(3)Kafka怎么使用?
在Kafka官网下载包:http://kafka.apache.org/downloads
安装教程这里不做介绍,需要的可以自行百度。
(4)消息队列小知识
消息队列(MQ,Message Queue)分为:同步处理和异步处理两种。
同步处理:生产者跟消费者必须同时在线,任意一个掉线则消息队列行为失败;
异步处理:生产者跟消费者不需要同时在线,生产者在线生成数据时消费者可以掉线,消费者上线后可以拉取之前生产者所生成的数据(类似于我们比如的实时通讯软件:QQ,微信;当你掉线有人发消息给你,你几小时上线再收取消息一样的情况)。
对于使用消息队列的好处则跟kafka类似。
消息队列有两种模式:点对点模式(一对一,消费者主动拉取数据,消费消息后消息清除)和发布/订阅模式(一对多,消费者消费数据后不会清除消息)。
而在发布/订阅模式中又分为:生产者一有数据,将消息发给消费者(不管消费者能不能能力消费);消费者想拉取消息的时候自己去拉取消息。
前者容易让消费者出现“消化不良”现象,后者容易让消费者拉取消息的时候并没有消息造成“空手而归”。
2、Kafka基础架构
这里提供两张图,图一由小编画的,图二由尚硅谷教程中的图片。
注意:图二提到的Kafka0.9版本之前的offset是存储在Zookeeper的,0.9版本及之后的offset是存储在本地,减轻频繁访问Zookeeper的操作。
(1)Producer(生产者)
Producer:消息生产者。向Kafka Broker发消息的客户端。
(2)Consumer(消费者)
Consumer:消息消费者。向Kafka Broker取消息的客户端。
(3)Consumer Group(GG,消费组)
Consumer Group(GG):消费者组,有多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内的消费者消费;消费者组之间互不影响。
所有消费者都属于一个消费者组的话,逻辑上的一个订阅者。
(4)Broker(服务器)
Broker:一个broker就是一台Kafka服务器。一个集群由多个broker组成;一个broker可以容纳多个topic。
(5)Topic(主题)
Topic:主题。生产者和消费者面向的都是一个topic。
(6)Partition(分区)
Partition:分区。为了实现扩展性,一个topic可以分布到多个broker上,一个topic可以分为多个parition。
(7)Replica(副本)
Replica:副本,为保证在集群中某个节点发生故障时,集群提供的服务仍旧正常运行,parition数据不丢失。
Kafka提供副本机制,一个topic的每个分区都有n个副本,一个leader和n个follower。
(8)leader(主)
leader:副本的主。生产者发送数据的对象以及消费者消费数据的对象都是leader。
(9)follower(从)
follower:副本的从。实时从leader中同步数据,保持和leader数据的同步。
leader发生故障时,某个follower会成为新的follower。
3、Kafka使用教程(Topic增删改查)
由Kafka服务器创建topic,当中定义topic名称、副本数量、分区数量。再将Producer和Consumer的客户端启动,由Producer发送消息,Consumer实时消费消息。
以下为简单的案例:
这里示范的Kafka服务器有三台,分为no1、no2、no3(Kafka集群的节点数为3)。
这里示范的生产者和消费者客户端各一台,分为log1、log2。
注意:定义副本数量时不可超过节点数!
no1服务器上创建topic(定义名为white,副本数量3,分区数量2的topic):
[no1]$ kafka/bin/kafka-topics.sh --zookeeper no1:2181 --create --replication-factor 3 --partitions 2 --topic white
查看当前no1服务器所有的topic:
[no1]$ kafka/bin/kafka-topics.sh --zookeeper no1:2181 --list
查看topic为white的详情:
[no1]$ kafka/bin/kafka-topics.sh --zookeeper no1:2181 --describe --topic white
修改topic为white的分区数:
[no1]$ kafka/bin/kafka-topics.sh --zookeeper no1:2181 --alter --topic white --partitions 3
生产者客户端log1 发送消息(发送“hello,white_mvlog”):
[log1]$ kafka/bin/kafka-console-producer.sh --broker-list no1:9092 --topic white
>hello,white_mvlog
消费者客户端log2 接收消息:
#这里分三种接收消息方法
#第一种:使用Kafka0.9之前的版本命令行来接收消息;
#第二种:使用Kafka0.9和之后的版本命令行来接收消息;
#第三种:与第二种类似,另加将掉线时未消费的消息抓取出来接收;
#************************第一种**********************************
[log1]$ kafka/bin/kafka-console-consumer.sh --zookeeper no1:2181 --topic white
#************************第二种**********************************
[log1]$ kafka/bin/kafka-console-consumer.sh --bootstrap-server no1:2181 --topic white
#************************第三种**********************************
[log1]$ kafka/bin/kafka-console-consumer.sh --bootstrap-server no1:2181 --topic white --from-beginning
删除topic名字为white的:
[no1]$ kafka/bin/kafka-topics.sh --zookeeper no1:2181 --delete --topic white
[ 详解二PS说明 ]
这里的详解一,仅有Kafka的简单介绍和简单使用案例。
详解二请关注小编博客,查看Kafka的栏目即可。