kafka学习00-Kafka相关概念

1.2.1 消息

消息:字节数据组。消息有一个可选的元数据称为键,也是一个字节数组,在分区时会对键取hash值再模以分区数得到这条数据存进哪个分区。

1.2.2 模式

可以理解为数据的格式:如:json、xml、强类型模式
Avro提供了一种紧凑的序列化格式,模式和消息体是分开的,支持强烈型和模式进化。
数据格式要一致才能解除生产者和消费者之间的耦合。

1.2.3 主题和分区

主题:可以把一个主题看成是从生产者流到消费者的一条数据流。
分区:一个主题可以有多个分区,数据被追加到这些分区,单个分区内到数据是有序的。
    分区的好处是数据冗余备份和数据吞吐的伸缩性,分区是负载均衡和冗余备份的单位。

1.2.4 生产者和消费者

生产者:负责把数据写入主题。默认是均衡的把消息写到所有分区,也可以指定分区器,通过消息的键生成一个散列值,将其映射到指定分区上。
消费者:读取主题数据。
        偏移量:消费者通过检查偏移量来记录已经读区过的消息,每个分区内的偏移量都是唯一、递增的。每个分区最后读取的偏移量被保存到zookeeper或Kafka中
消费者群组:一个消费者组对应一个主题。一个主题内的一个分区只能被一个消费者所有,但一个消费者可以拥有多个分区。
        这样设计的好处在于:
            1. 保证了在一个组内,每条消息只被处理一次。
            2. 这种方式让消费者组可以负载均衡的消费大量消息的主题,而且还具有容灾的特性。

1.2.5 broker和集群

broker:一个独立的Kafka server就是一个broker
        对生产者作用:接收消息->设置偏移量->提交存盘
        对消费者作用:响应读取消息的请求
        性能:数千分区、每秒百万级别数据
        对于分区:一个分区可以存储到多个broker上,其中一个是master负责读写消息,其它的salve负责复制数据备份,master挂了会有一个顶上
集群:集群内会有一个broker作为controller的角色,负责分配分区给broker和监控broker
保留消息:保留一段时间、保留一定大小、紧凑型日志(只有最后一个带有特定键的消息会被保留)

1.3选择kafka的理由

1. 支持多个生产者同时写如一个主题,消费者可以获得统一主题数据
2. 可以重复消费一个主题,一个主题可以由多个消费者并发消费,每个分区只能指定一个消费者,保证了每条消费只被消费一次。
3. 基于磁盘的存储。让消息可以保留、不会阻塞在生产端、消费端可重复消费、消费者离线也不会丢数据
4. 伸缩性好,broker可以从一个逐步扩展到多个

你可能感兴趣的:(kafka学习00-Kafka相关概念)