kafka是一个分布式的基于发布/订阅模式的消息队列,只要应用于大数据实时处理领域

消息队列的两种模式:


  发布/订阅的模式(一对多 消费者消费数据后不会清除数据)

 

kafka基础架构(去中心化)

producer:消息生产者,就是向kafka broker发消息的客户端

consumer:消息消费者,向kafka broker区消息的客户端

consumer Group:消费者组,由多个consumer组成 消费组内的消费者负责消费不同分区内的数据,一个分区只能由一个组内消费者消费,消费者组之间互不干扰,所以有的消费者都属于同一个消费者组,消费者组是逻辑上的一个订阅者

broker:一台kafka服务器就是一个broker,一个集群由多个broker组成,一个broker可以包含多个topic

topic:可以理解为一个队列 生产者和消费者面向的都是一个topic

partition:为实现扩展性,一个非常大的topic可以分不到不同的broker上去,一个topic可以分为多个partition,每一个partition是一个有序队列

replica:副本 为了保证集群中某个结点发生故障时,该节点上的partition数据不丢失,而且kafka能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干副本,一个leader多个follower

leader:生产者发送数据的对象,以及消费者消费数据的对象都是leader

follower:实时从leader中同步数据,保持和leader数据的同步,leader发生故障时 某个follower会成为新的leader

 

在配置kafka参数时需要修改的是:

broker的全局唯一编号,不能重复
broker.id=0
#删除topic的功能
delete.topic.enable=true

#配置kafka运行日志的存放路径
log.dirs=/usr/local/soft/kafka-xx/log

$连接zk的地址
zookeeper.connect=master:2181,node1:2181,node2:2181


将组件分发到node1和node2上 注意要修改broker编号

 

kafka启动命令:

kafka-server-start.sh -daemon /usr/local/soft/kafka_2.11/config/server.properties

查看当前kafka中所有的topic 命令:

 

kafka-topics.sh --zookeeper master:2181,node1:2181,node2:2181 --list

创建topic的命令:

kafka-topics.sh --zookeeper master:2181,node1:2181,node2:2181 --replication-factor 1 --partitions 1 --topic first --create

注意:
  --topic 定义topic的名称
  --replication-factor 定义副本的个数
  --partitions 定义分区数

删除topic的命令:

kafka-topics.sh --zookeeper master:2181,node1:2181,node2:2181 --topic first --delete

创建生产者生产消息的命令:

kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic 名称

创建消费者的命令:

kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --from-beginning --topic 名称

查看某个某刻topic的详情:

kafka-topics.sh --zookeeper master:2180 --describe --topic  名称

修改分区数:

kafka-topics.sh --zookeeper master:2181 --alter --topic 名称  --partition 2

 

 

kafka工作流程及文件存储机制

kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic

topic是逻辑上的逻辑,而partition是物理上的概念,每个partition对应一个log文件,该log文件中存储的就是producer生产的数据 Producer 生产的数据会被不断追加到该log 文件末端,且每条数据都有自己的 offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费

 kafka文件的存储机制:

一个topic分为两个partition,一个partition分为多个segment,一个segment对应两个文件

由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位效率低下,Kafka 采取了 分片和 索引机制,将每个 partition 分为多个 segment。每个 segment对应两个文件——“.index”文件和“.log”文件。这些文件位于一个文件夹下,该文件夹的命
名规则为:topic 名称+分区序号。例如,first 这个 topic 有三个分区,则其对应的文件夹为 first-0,first-1,first-2。

 

“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message 的物理偏移地址