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. 牛客网数据库SQL实战解析(41-50题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  2. 如何满足EN50128软件安全认证标准?

    导语 EN 50128是为铁路行业的特定需求量身定制的功能安全标准.其标题为“铁路应用—通信,信号和处理系统—铁路控制和防护系统软件”.遵守该标准的要求对于铁路软件开发是至关重要的.因此,必须了解什么 ...

  3. 创建VUE+Element-UI项目

    创建项目步骤 安装node.js后,使用管理员角色在cmd中依次运行下列步骤 vue init webpack hello-vue 创建项目文件 cd hello-vue 进入项目 npm insta ...

  4. RabbitMQ系列随笔——介绍及安装

    一.RabbitMQ介绍 RabbitMQ是由erlang开发的AMQP(Advanced Message Queuing Protocol)的开源实现.他是高级消息队列协议,是应用层协议的一个开放标 ...

  5. Min Cost Climbing Stairs [746]

    Min Cost Climbing Stairs [746] 题目描述 简单来说就是:要跳过当前楼梯需要花费当前楼梯所代表的价值cost[i], 花费cost[i]之后,可以选择跳一阶或者两阶楼梯,以 ...

  6. JavaScript 究竟是怎样去执行的?

    摘要: 理解 JS 引擎运行原理. 作者:前端小智 原文:搞懂 JavaScript 引擎运行原理 Fundebug经授权转载,版权归原作者所有. 一些名词 JS 引擎 — 一个读取代码并运行的引擎, ...

  7. 【学习中】Fitness Schedule

    章节 内容 签到 第1周:步伐 √第1课(34分钟) 跑步1分钟 行走2分钟 共做8次 4月24日 √第2课(28分钟) 跑步1分钟 行走2分钟 共做6次 4月27日 √第3课(31分钟) 跑步1分钟 ...

  8. 文件操作 -- 生成java文件

    import hashlibimport os def genJavaFile(packageName, soFile):    className, suffix = soFile.split('. ...

  9. 持续部署入门:基于 Kubernetes 实现蓝绿发布

    前言 软件世界比以往任何时候都更快.为了保持竞争力,需要尽快推出新的软件版本,而不会中断活跃用户访问,影响用户体验.越来越多企业已将其应用迁移到 Kubernetes. 在 Kubernetes 中有 ...

  10. 浅谈DOM事件的优化

    在 JavaScript 程序的开发中,经常会用到一些频繁触发的 DOM 事件,如 mousemove.resize,还有不是那么常用的鼠标滚轮事件:mousewheel (在 Firefox 中,滚 ...