有关Kafka的那些事
Kafka基本概念
- Producer: 消息和数据的生产者,向kafka的一个topic发布消息的进程、代码、服务。
- Consumer:消息和数据的消费者,订阅数据并且处理器发布的消息的进程、代码、服务。
- Consumer Group:逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息。
- Broker:物理概念,kafka集群中每个kafka节点
- topic:逻辑概念,kafka消息的类别,对数据进行区分,隔离
- Partition:分区,物理概念,kafka下数据存储的基本单元,一个topic数据,会被分散存储到多个Partition,每一个Partition是有序的。
1. 每一个Topic被切分为多个Partitions
2. 消费者数目小于或等于Partition的数目
3. Broke Group中的每个Broke保存Topic的一个或多个Partitions
4. Consumer Group中有且仅有一个Consumer读取Topic的一个或多个Partitions,并且是唯一的Consumer。 - Replication:副本,同一个Partition可能会有多个Replica,多个Replica之间数据是一样的。
1. 当集群中有Broker挂掉的情况,系统可以主动使Replicas提供服务。
2. 系统默认设置每一个Topic的Replication系数为1,可以在创建Topic时单独设置。
3. Replication的基本单位是Topic的Partition。
4. 所有的读和写都是Leader进,Followers只是作为备份。
5. Follower必须能够及时复制Leader的数据。
6. 增加容错性和可拓展性。 - Replication Leader:一个Partition的多个Replica上,需要一个Leader负责该Partition上与Producer和Consumer交互,一个Partition有且只有一个Leader。
- RepliceManager:负责管理当前broker的所有分区和副本的信息,处理kafkaController发起的一些请求,副本状态的切换、添加/读取消息等
kafka基本结构


kafka消息结构:

kafka的特点
分布式
- 多分区
- 多副本
- 多订阅者
- 基于ZooKeeper调度
高性能
- 高吞吐量
- 低延时
- 高并发
- 时间复杂度为O(1)
持久性和拓展性
- 数据可持久化
- 容错性
- 支持在线水平拓展
- 消息自动平衡
kafka应用场景
- 消息队列
稳定性,高吞吐性,消息可被重复消费、低延迟性 - 行为跟踪
- 元数据监控
- 日志收集
- 流处理
- 事件源
- 持久性日志(commit log)
kafka高级特性
kafka消息事务
- 为什么要支持事务?
- 满足"读取-处理-写入"模式
- 流处理需求的不断增强
- 数据传输的事务定义
- 最多一次:消息不会别重复发送,最多被传输一次,但也有可能一次不传输
- 最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输
- 精确的一次(Exactly once):不会漏传输也不会重复传输,每个消息都传输且仅仅传输一次,这是大家所期望的
- 事务保证
- 内部重试问题:Producer幂等处理
- 多分区原子写入
- 避免僵尸实例

零拷贝
- 网络传输持久性日志块
- Java Nio channel.transforTo()方法
- Linux sendfile系统调用
文件传输到网络的公共数据路径
1. 操作系统将数据从磁盘读入到内核空间的页缓存
2. 应用程序将数据从内核空间读入到用户空间缓存中
3. 应用程序将数据写回到内核空间到socket缓存中
4. 操作系统将数据从socket缓存区复制到网卡缓存区,以便将数据经网络发出
零拷贝过程:
1. 操作系统将数据从磁盘读入到内核空间的页缓存
2. 将数据的位置和长度等信息的描述符增加至内核空间(socket缓冲区)
3. 操作系统将数据从内核拷贝到网卡缓冲区,以便将数据经网络发出
零拷贝指的是内核空间和用户空间之间的交互拷贝次数为零

参考
有关Kafka的那些事的更多相关文章
- 饶军:Apache Kafka的过去,现在,和未来
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 大家好,我大概简单的介绍一下,我叫饶军,我是硅谷的初创公司Confluent的联合创始人之一,我们公 ...
- 聊一聊高并发高可用那些事 - Kafka篇
目录 为什么需要消息队列 1.异步 :一个下单流程,你需要扣积分,扣优惠卷,发短信等,有些耗时又不需要立即处理的事,可以丢到队列里异步处理. 2.削峰 :按平常的流量,服务器刚好可以正常负载.偶尔推出 ...
- Kafka文件存储机制那些事
Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...
- Kafka 文件存储机制那些事 - 美团技术团队
出处:https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html 自己总结: Kafka 文件存储机制_结构图:https://ww ...
- 转】 Kafka文件存储机制那些事
原博文出自于:http://tech.meituan.com/kafka-fs-design-theory.html 感谢! Kafka是什么 Kafka是最初由Linkedin公司开发,是一个 ...
- 这事没完,继续聊spring cloud stream和kafka的这些小事
上一篇文章讲了如何用spring cloud stream集成kafka,并且跑起来一个demo,如果这一次宣传spring cloud stream的文章,其实到这里就可以啦.但实际上,工程永远不是 ...
- 简单聊一聊spring cloud stream和kafka的那点事
Spring Cloud Stream is a framework for building highly scalable event-driven microservices connected ...
- Vertica的这些事(十四)——Vertica实时消费kafka实现
一. 安装环境 Vertica官方提供了消费kafka的方法,需要注意版本对应 消费kafka原理,是Vertica提供的Udx 首先需要安装相应的环境 /${vertica}/packages/ka ...
- Kafka和RocketMQ底层存储之那些你不知道的事
大家好,我是yes. 我们都知道 RocketMQ 和 Kafka 消息都是存在磁盘中的,那为什么消息存磁盘读写还可以这么快?有没有做了什么优化?都是存磁盘它们两者的实现之间有什么区别么?各自有什么优 ...
随机推荐
- Intelligence Beyond the Edge: Inference on Intermittent Embedded Systems
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 以下是对本文关键部分的摘抄翻译,详情请参见原文. Abstract 能量收集技术为未来的物联网应用提供了一个很有前景的平台.然而,由于这些 ...
- muduo源码解析2-AtomicIntegerT类
AtomicIntegerT template<typename T> class atomicTntergerT:public noncopyable { }; 作用: 与std::ao ...
- Javascript循环和代码规范
1 - 循环 1.1 for循环 语法结构 for(初始化变量; 条件表达式; 操作表达式 ){ //循环体 } 名称 作用 初始化变量 通常被用于初始化一个计数器,该表达式可以使用 var 关键字声 ...
- .net core学习笔记,组件篇:服务的注册与发现(Consul)初篇
1.什么是服务注册中心? 在学习服务注册与发现时,我们要先搞明白到底什么是服务注册与发现. 在这里我举一个生活中非常普遍的例子——网购来简单说明,网购在我们日常生活中已经是非常普遍了,其实网购中的(商 ...
- Java开发环境搭建的准备工作
Java开发环境搭建的准备工作 网络配置(修改hosts) 什么时候需要 比如我们在安装homeBrew的时候会遇到 curl: (7) Failed to connect to raw.github ...
- Python爬虫实战 批量下载高清美女图片
彼岸图网站里有大量的高清图片素材和壁纸,并且可以免费下载,读者也可以根据自己需要爬取其他类型图片,方法是类似的,本文通过python爬虫批量下载网站里的高清美女图片,熟悉python写爬虫的基本方法: ...
- Spark保存的时候怎么去掉多余的引号转义
今天用SparkSQL保存一份json数据的时候,引号被转义了,并用括号包起来了,导致下游新来的小伙伴无法处理这份数据. 保存后的数据长这样(用\t分割): data "{\"ke ...
- new Map()详细介绍与对比
说明: Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现.如果你需要“键值对”的数据结构,Map比Object更合适.它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串, ...
- C# .NET容器的源码
这里有List<T>的源码http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
- 想在java接口自动化里用上Python的requests?这样做就可以了
相信现在很多的公司自动化测试重点都在接口层,因为接口测试更加接近代码底层,相对于UI自动化,接口自动化有着开发更快.覆盖更全.回报率高等优点. 接口自动化代码实现不难,本质上就是代码模拟发送请求,然后 ...