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的特点

分布式

  1. 多分区
  2. 多副本
  3. 多订阅者
  4. 基于ZooKeeper调度

高性能

  1. 高吞吐量
  2. 低延时
  3. 高并发
  4. 时间复杂度为O(1)

持久性和拓展性

  1. 数据可持久化
  2. 容错性
  3. 支持在线水平拓展
  4. 消息自动平衡

kafka应用场景

  1. 消息队列

    稳定性,高吞吐性,消息可被重复消费、低延迟性
  2. 行为跟踪
  3. 元数据监控
  4. 日志收集
  5. 流处理
  6. 事件源
  7. 持久性日志(commit log)

kafka高级特性

kafka消息事务

  1. 为什么要支持事务?
  • 满足"读取-处理-写入"模式
  • 流处理需求的不断增强
  1. 数据传输的事务定义
  • 最多一次:消息不会别重复发送,最多被传输一次,但也有可能一次不传输
  • 最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输
  • 精确的一次(Exactly once):不会漏传输也不会重复传输,每个消息都传输且仅仅传输一次,这是大家所期望的
  1. 事务保证
  • 内部重试问题:Producer幂等处理
  • 多分区原子写入
  • 避免僵尸实例

零拷贝

  • 网络传输持久性日志块
  • Java Nio channel.transforTo()方法
  • Linux sendfile系统调用

文件传输到网络的公共数据路径

1. 操作系统将数据从磁盘读入到内核空间的页缓存

2. 应用程序将数据从内核空间读入到用户空间缓存中

3. 应用程序将数据写回到内核空间到socket缓存中

4. 操作系统将数据从socket缓存区复制到网卡缓存区,以便将数据经网络发出

零拷贝过程:

1. 操作系统将数据从磁盘读入到内核空间的页缓存

2. 将数据的位置和长度等信息的描述符增加至内核空间(socket缓冲区)

3. 操作系统将数据从内核拷贝到网卡缓冲区,以便将数据经网络发出

零拷贝指的是内核空间和用户空间之间的交互拷贝次数为零

参考

有关Kafka的那些事的更多相关文章

  1. 饶军:Apache Kafka的过去,现在,和未来

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 大家好,我大概简单的介绍一下,我叫饶军,我是硅谷的初创公司Confluent的联合创始人之一,我们公 ...

  2. 聊一聊高并发高可用那些事 - Kafka篇

    目录 为什么需要消息队列 1.异步 :一个下单流程,你需要扣积分,扣优惠卷,发短信等,有些耗时又不需要立即处理的事,可以丢到队列里异步处理. 2.削峰 :按平常的流量,服务器刚好可以正常负载.偶尔推出 ...

  3. Kafka文件存储机制那些事

    Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...

  4. Kafka 文件存储机制那些事 - 美团技术团队

    出处:https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html 自己总结: Kafka 文件存储机制_结构图:https://ww ...

  5. 转】 Kafka文件存储机制那些事

    原博文出自于:http://tech.meituan.com/kafka-fs-design-theory.html    感谢! Kafka是什么 Kafka是最初由Linkedin公司开发,是一个 ...

  6. 这事没完,继续聊spring cloud stream和kafka的这些小事

    上一篇文章讲了如何用spring cloud stream集成kafka,并且跑起来一个demo,如果这一次宣传spring cloud stream的文章,其实到这里就可以啦.但实际上,工程永远不是 ...

  7. 简单聊一聊spring cloud stream和kafka的那点事

    Spring Cloud Stream is a framework for building highly scalable event-driven microservices connected ...

  8. Vertica的这些事(十四)——Vertica实时消费kafka实现

    一. 安装环境 Vertica官方提供了消费kafka的方法,需要注意版本对应 消费kafka原理,是Vertica提供的Udx 首先需要安装相应的环境 /${vertica}/packages/ka ...

  9. Kafka和RocketMQ底层存储之那些你不知道的事

    大家好,我是yes. 我们都知道 RocketMQ 和 Kafka 消息都是存在磁盘中的,那为什么消息存磁盘读写还可以这么快?有没有做了什么优化?都是存磁盘它们两者的实现之间有什么区别么?各自有什么优 ...

随机推荐

  1. SpringBoot集成Swagger2,3分钟轻松入手!

    一.引入maven <dependency> <groupId>io.springfox</groupId> <artifactId>springfox ...

  2. 团队作业4:第六篇Scrum冲刺博客(歪瑞古德小队)

    目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...

  3. 从《三体》到“中美科技战”,3分钟理解“网络”D丝为什么要迎娶“算力”白富美

    摘要:在多维的世界里,高维的文明对于低维文明具有碾压的优势,而网络也正在从二维走向三维!网络硬件的竞争主要是“芯片+算法”. 从三体到中美科技战,理解网络与算力深度融合助力高维度竞争 1:对抗封锁,需 ...

  4. 区块链入门到实战(31)之Solidity – 第一个程序

    为简单起见,我们使用在线Solidity开发工具Remix IDE编译和运行Solidity程序. 第1步 – 在File explorers选项卡下,新建一个test1.sol文件,代码如下: 示例 ...

  5. javascript正则用法

    一.元字符 .      匹配除了换行符以外的字符. \w   匹配字母或者数字或者下划线 \W  匹配不是字母.数字.下划线 \d   匹配数字,相当于[0-9] \D  匹配不是数字的字符 \s  ...

  6. 谷歌蜂鸟算法对网站seo优化有何影响

    http://www.wocaoseo.com/thread-89-1-1.html       谷歌在过去三个月里,非常低调的推出了蜂鸟算法,据谷歌技术员表示,此种方法一出,将影响90%网站的排名, ...

  7. 解决 SQL 注入和 XSS 攻击(Node.js 项目中)

    1.SQL 注入 SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令. SQL 注入示例 在登录界面,后端会根 ...

  8. java生成四位随机数,包含数字和字母 区分大小写,特别适合做验证码,android开发

    private String generateWord() { String[] beforeShuffle = new String[] { "2", "3" ...

  9. Selenium 如何复用浏览器【解决扫码登录等问题】

    Selenium中复用已经打开的浏览器进行自动化测试,可以辅助我们解决某些登录需要扫二维码之后,才能进行的操作 目前只支持谷歌Chrome浏览器,那需要做哪些准备操作呢?往下看 1.windows和M ...

  10. hdu6075 2019CCPC网络选拔赛1004 path

    题意:给定一个带权有向图,有q组询问,每次询问在有向图的所有路径中,第k小的路径权值 解题思路:因为k最大只有5e4,考虑暴力搜索出前maxk小的路径并用数组记录权值,然后就可以O(1)查询. 具体实 ...