快乐大数据第6课 Kafka

Kafka

定义topic 类似于一个表  存储相同格式,有顺序的数据,传到kafka里面的数据叫消息。

按照磁盘顺序来读写数据 通过多分区,多副本提供容错性。

分区内有序读取和存储

Kafka原理

1.Partition内 顺序存储,写入新消息采用追加的方式,消费消息采用FIFO的方式顺序拉取消息

2.一个Topic可以有多个分区,Kafka只保证同一个分区内有序,不保证Topic整体(多个分区之间)

有序

3 Consumer Group(CG),为了加快读取速度,多个consumer可以划分一个组,并行消费一个Topic

一个Topic可以由多个CG订阅,多个CG之间是平等的,同一个CG内可以有一个多个consumer,同一个

CG内的consumer之间是竞争关系,一个消息在一个CG内只能被一个consumer消费。

Kafka核心概念

Topic:特指Kafka处理的消息源(feeds of messages)的不同分类,相当于数据库的表。

Broker:缓存代理,Kafa集群中的一台或多台服务器统称为broker。

Partition:Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)

相当于把一个数据集分成多份放到不同的分区中存储。

Replication:副本,一个partition可以设置一个或多个副本,副本保证系统能够持续不丢失对外提供服务,提供系统的容错能力。

Message:消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息。

Producers:消息和数据生产者,向Kafka的一个topic发布消息的过程叫做producers。

Consumers:消息和数据消费者,订阅topics并处理其发布的消息的过程叫做consumers。

Consumer Group:消费者所属组,一个Consumer group可以包含一个或者多个consumer。当一个topic被一个Consumer Group消费的时候。

Consumer Group内只能有一个consumer消费同一条消息,不会出现同一个Consumer Group多个consumer同时消费一条消息的情况。

Zookeeper:Zookeeper在kafka集群中主要用于协调管理,Kafka将

元数据信息保存在Zookeeper中,通过Zookeeper管理维护整个Kafka

集群的动态扩展、各个Broker负载均衡、Partition leader选举等

#Kafka存储

每个partition的副本是一个目录

Segment:段文件,kafka中最小数据存储单位,一个partition包含多个segment文件,每个segment以message在partition中的起始偏移量

命名以log结尾的文件Offset:消息在分区中的偏移量,用来在分区中唯一的标识这个消息。

afka为了提高写入、查询速度在partition文件夹下每一个segment log文件都有同名的索引文件,在kafka0.10以后的版本中会存在两个

索引文件,一个用offset做名字以index结尾的索引文件,我们称为偏移量索引文件。一个是以消息写入的时间戳为做名字以timeinde

结尾的索引文件,我们称为时间戳索引文件。

存在两种索引文件:

    偏移量索引:index为后缀,通过log.index.interval.bytes设置索引跨度,索引内容格式:offset,position。

    时间戳索引:timestamp,offset,通过log.index.interval.bytes设置索引跨度。

#Kafka高可用的实现

(1)多分区多副本

同一个partition的不同副本分布到不同的broker。一个分区的多个副本选举一个leader,由leader负责读写,其他副本作为follower从leader同步消息,

(2)Kafka Controller选举

从集群中的broker选举出一个Broker作为Controller控制节点;负责整个集群的管理,如Broker管理、Topic管理、Partition Leader选举等。选举过程

通过向Zookeeper创建临时znode实现,为被选中的Broker监听Controller的znode,等待下次选举。

(3)Kafka Partition Leader选举:

Controller负责分区Leader选举。ISR列表:Follower批量从Leader拖取数据;Leader跟踪不其保持同步的flower列表ISR(In Sync Replica),ISR作为

下次选主的候选列表。Follower心跳超时或者消息落后太多,将被移除出ISR。Leader失败后,从ISR列表中选择一个Follower作为新的Leader。

实际演示

(1)安装略

(2)

创建主题

bin/kafka-topics.sh --create --zookeeper 192.168.183.101:2181,192.168.183.102:2181,192.168.183.103:2181,192.168.183.104:2181,192.168.183.105:2181, --replication-factor 2 --partitions 3 --topic topicnewtest1

bin/kafka-topics.sh --create --zookeeper 192.168.183.101:2181,192.168.183.102:2181,192.168.183.102:2181,192.168.183.104:2181,192.168.183.105:2181, --replication-factor 2 --partitions 3 --topic test2

bin/kafka-topics.sh --create --zookeeper 192.168.183.101:2181,192.168.183.102:2181,192.168.183.102:2181,192.168.183.104:2181,192.168.183.105:2181, --replication-factor 2 --partitions 3 --topic test3

bin/kafka-topics.sh --create --zookeeper 192.168.183.101:2181,192.168.183.102:2181,192.168.183.102:2181,192.168.183.104:2181,192.168.183.105:2181, --replication-factor 2 --partitions 3 --topic sumer_offset

查看主题信息

bin/kafka-topics.sh --describe --zookeeper 192.168.183.101:2181 --topic topicnewtest1

查看kafka中已经创建的主题列表

bin/kafka-topics.sh --list --zookeeper 192.168.183.101:2181

删除主题

bin/kafka-topics.sh --delete --zookeeper 192.168.183.101:2181 --topic topictest1

增加分区

bin/kafka-topics.sh --alter --zookeeper 192.168.183.101:2181 --topic topicnewtest1 --partitions 5

使用kafka自带的生产者客户端脚本

在node03上,bin/kafka-console-producer.sh --broker-list 192.168.183.103:9092,192.168.183.104:9092 --topic topicnewtest1

使用kafka自带的消费者客户端脚本

bin/kafka-console-consumer.sh --zookeeper 192.168.183.101:2181 --from-beginning --topic topicnewtest1

生产者和消费者的例子

你可能感兴趣的:(快乐大数据第6课 Kafka)