ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kafka的相关知识

2020-12-21 19:58:48  阅读:191  来源: 互联网

标签:一次 Partition 知识 Kafka Topic 消息 offset 相关


Kafka

1.定义

一种高吞吐量的分布式、支持分区、多副本的,基于zookeeper协调的消息系统

2.特性

稳定性高
	通过O(1)的磁盘数据结构提供消息的持久化,这种结构就算是TB以上级别的消息存储都能够保持长	时间的稳定性能
高吞吐量、低延迟
	普通的硬件Kafa也可以支持每秒数百万的消息
	延迟最低只有几毫秒
高并发
	支持数千个客户端同时读写
容错性好
	消息的负载均衡的存储与消费
	支持通过kafka服务器集群来分区存储、分布式消费消息的机制.
良好支持hadoop并行计算
	支持Hadoop并行数据加载

3.组件介绍
1.Message
俗称消息,是Kafka集群到账存储的真正的实体数据.
由数据源push到Kafka集群,然后消费者角色从Kafka拉取(pull)消费数据的统称.
2.Broker
Kafka集群包含一个或多个服务器,这种服务器统一被称为broker,即中间人,和事佬.
3.Topic
每条push到集群的消息都有一个主题(类),这个类别被称为Topic,相当于给这类消息放进的一个管道,并且可以给它起个名字.
4.Partition
Partition是物理上的概念,每个Topic存在于一个或多个Partition中,或者说包含多个Partition.
5.Segment
Partition物理上由多个segment组成,每个segment都存有message信息.
Partition文件分Segment管理,减少单个文件太大的问题,并方便更快速定位Message在哪个Segment中.
定位Segment后,课根据Segment对应的index索引和message log 日志文件快速定位和读取相应message消息.
6.Producer
生产者,负责发布消息到Kafka broker.
7.Consumer
消息消费者,向Kafka broker读取消息的客户端
8.发布 publish和订阅 subscribe
发布消息,即生产消息,将生产出来的消息加入到MQ当中.
订阅消息,由消费者主动提前定义订阅消息的Topic名称,如果该Topic类中的消息有新增,则会主动通过消费者线程,此时消费者线程进入消息的处理过程.
9.Consumer Group
每个Consumer属于一个特定的Consumer Group
可为每个Consumer指定group name,若不指定group name 则属于默认的group
每个Group共享订阅的Topic消息,但是这个topic中的每个消息只会被这个group中的一个consumer消费.(类似于几个人都关注喜欢了一个女同学,但是只能嫁给一个人)
10.Offset
即为偏移量.分区中的消息,都会有一个递增的id,成为offset,是分区中消息的唯一标识.

4.消息系统的语义
三种语义:最多一次,最少一次,严格一次
最多一次:消息可能丢失,但是不重复提交
最少一次:消息不会丢失,但是可能重复提交
严格一次:消息不丢失,不重复,只会被分发一次

生产者语义剖析
最多一次:
1.producer产生数据后,有可能数据没有写成功(比如,只管写入,不确认应答消息)
2.这时broker跳过这个发送失败的消息,该数据就会丢失,导致consumer无法消费
最少一次:
1.producer产生数据后已经写入成功到Kafka broker集群
2.但是broker出现异常,没有返回应答消息
3.此时producer会认为数据没有写入成功,会再次写入,此时相当于写入重复.
严格一次:
生产者只有一次将消息成功发送给Broker
这种情况是精准生产一次.
该语义实现方法:
1.幂等性:
定义:多次完全相同的操作,只会有一次真正生效,并且不回因为多次做重复操作产生副作用.
Kafka实现方式:通过引入ProducerID及Sequence Number支持幂等性,保证精确语义.
2.分布式事务:
通过分布式事务实现生产写入的原子性操作
事务的4大特性:
Atom:原子性
Consistency:一致性
lsolated:隔离性
Durablity:持久性

消费者语义剖析
最多一次:
1.消费者先读取数据,然后提交offset确认消费记录,最后处理数据
2.如果在提交offset成功后,还没有及时的处理数据,就异常了,然后新的consumer继续从这个offset处理,这个数据永远不会被处理.
最少一次(默认):
1.消费者先读取数据,然后处理数据,最后提交offset确定消费.
2.如果在提交offset之前就异常退出,则确定消费的确认失败,则新的consumer会重复的来消费这条数据
严格一次:
1.消费者通过将提交分成两个阶段
2.先读取数据后,先提交offset确认已读取消息一次等待处理,然后消息处理成功后,再提交一次确认消费成功一次.
Kafka Streams模块也实现了该语义功能

标签:一次,Partition,知识,Kafka,Topic,消息,offset,相关
来源: https://blog.csdn.net/fff1113334654/article/details/111486469

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有