2019独角兽企业重金招聘Python工程师标准>>>

介绍

Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。这个独特的设计是什么样的呢?

首先让我们看几个基本的消息系统术语:

Kafka将消息以topic为单位进行归纳。

将向Kafka topic发布消息的程序成为producers.

将预订topics并消费消息的程序成为consumer.

Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.

producers通过网络将消息发送到Kafka集群,集群向消费者提供消息,如下图所示:

客户端和服务端通过TCP协议通信。Kafka提供了Java客户端,并且对多种语言都提供了支持。

Topics 和Logs

先来看一下Kafka提供的一个抽象概念:topic.

一个topic是对一组消息的归纳。对每个topic,Kafka 对它的日志进行了分区,如下图所示:

每个分区都由一系列有序的、不变的消息组成,这些消息被连续的追加到分区中。分区中的每个消息都有一个连续的序列号叫做offset,用来在分区中唯一的标识这个消息。

在一个可配置的时间段内,Kafka集群保留所有发布的消息,不管这些消息有没有被消费。比如,如果消息的保存策略被设置为2天,那么在一个消 息被发布的两天时间内,它都是可以被消费的。之后它将被丢弃以释放空间。Kafka的性能是和数据量无关的常量级的,所以保留太多的数据并不是问题。

实际上每个consumer唯一需要维护的数据是消息在日志中的位置,也就是offset.这个offset有consumer来维护:一般情 况下随着consumer不断的读取消息,这offset的值不断增加,但其实consumer可以以任意的顺序读取消息,比如它可以将offset设置 成为一个旧的值来重读之前的消息。

以上特点的结合,使Kafka consumers非常的轻量级:它们可以在不对集群和其他consumer造成影响的情况下读取消息。你可以使用命令行来"tail"消息而不会对其他正在消费消息的consumer造成影响。

将日志分区可以达到以下目的:首先这使得每个日志的数量不会太大,可以在单个服务上保存。另外每个分区可以单独发布和消费,为并发操作topic提供了一种可能。

分布式

每个分区在Kafka集群的若干服务中都有副本,这样这些持有副本的服务可以共同处理数据和请求,副本数量是可以配置的。副本使Kafka具备了容错能力。

每个分区都由一个服务器作为“leader”,零或若干服务器作为“followers”,leader负责处理消息的读和 写,followers则去复制leader.如果leader down了,followers中的一台则会自动成为leader。集群中的每个服务都会同时扮演两个角色:作为它所持有的一部分分区的leader,同 时作为其他分区的followers,这样集群就会据有较好的负载均衡。

Producers

Producer将消息发布到它指定的topic中,并负责决定发布到哪个分区。通常简单的由负载均衡机制随机选择分区,但也可以通过特定的分区函数选择分区。使用的更多的是第二种。

Consumers

发布消息通常有两种模式:队列模式和发布-订阅模式。队列模式中,consumers可以同时从服务端读取消息,每个消息只被其中一个consumer读到;发布-订阅模式中消息被广播到所有的consumer中。

Consumers可以加入一个consumer 组,共同竞争一个topic,topic中的消息将被分发到组中的一个成员中。同一组中的consumer可以在不同的程序中,也可以在不同的机器上。如果所有的consumer都在一个组中,这就成为了传统的队列模式,在各consumer中实现负载均衡。

如果所有的consumer都不在不同的组中,这就成为了发布-订阅模式,所有的消息都被分发到所有的consumer中。

更常见的是,每个topic都有若干数量的consumer组,每个组都是一个逻辑上的“订阅者”,为了容错和更好的稳定性,每个组由若干consumer组成。这其实就是一个发布-订阅模式,只不过订阅者是个组而不是单个consumer。

由两个机器组成的集群拥有4个分区 (P0-P3) 2个consumer组. A组有两个consumerB组有4个

相比传统的消息系统,Kafka可以很好的保证有序性。

传统的队列在服务器上保存有序的消息,如果多个consumers同时从这个服务器消费消息,服务器就会以消息存储的顺序向consumer分 发消息。虽然服务器按顺序发布消息,但是消息是被异步的分发到各consumer上,所以当消息到达时可能已经失去了原来的顺序,这意味着并发消费将导致 顺序错乱。为了避免故障,这样的消息系统通常使用“专用consumer”的概念,其实就是只允许一个消费者消费消息,当然这就意味着失去了并发性。

在这方面Kafka做的更好,通过分区的概念,Kafka可以在多个consumer组并发的情况下提供较好的有序性和负载均衡。将每个分区分 只分发给一个consumer组,这样一个分区就只被这个组的一个consumer消费,就可以顺序的消费这个分区的消息。因为有多个分区,依然可以在多 个consumer组之间进行负载均衡。注意consumer组的数量不能多于分区的数量,也就是有多少分区就允许多少并发消费。

Kafka只能保证一个分区之内消息的有序性,在不同的分区之间是不可以的,这已经可以满足大部分应用的需求。如果需要topic中所有消息的有序性,那就只能让这个topic只有一个分区,当然也就只有一个consumer组消费它。

欢迎大家一起学习研究相关技术愿意了解框架技术或者源码的朋友直接求求交流分享技术:2042849237

转载于:https://my.oschina.net/u/3873725/blog/1935676

KAFKA介绍(分布式架构)相关推荐

  1. SSM分布式项目01-技术点介绍项目介绍分布式架构对比SOA架构

    1. 技术特点 技术新,如redis 技术范围广 分布式(一件事拆分成多个部分完成) 高并发(并发量:同时访问,tomcat+Oracle 400~500).集群(多个人做同一件事).负载均衡.高可用 ...

  2. Kafka剖析:Kafka背景及架构介绍

    Kafka剖析:Kafka背景及架构介绍 <Kafka剖析:Kafka背景及架构介绍> <Kafka设计解析:Kafka High Availability(上)> <K ...

  3. Kafka剖析(一):Kafka背景及架构介绍--转

    原文地址:http://www.infoq.com/cn/articles/kafka-analysis-part-1?utm_source=infoq&utm_campaign=user_p ...

  4. Kafka剖析(一):Kafka背景及架构介绍

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  5. ASP.NET Core分布式项目实战(业务介绍,架构设计,oAuth2,IdentityServer4)--学习笔记...

    任务4:第一章计划与目录 敏捷产品开发流程 原型预览与业务介绍 整体架构设计 API 接口设计 / swagger Identity Server 4 搭建登录 账号 API 实现 配置中心 任务5: ...

  6. MemSQL分布式架构介绍(二)

    接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ 首先上张图,是我 ...

  7. 分布式架构及微服务介绍

    分布式架构 优点:耦合度低, 便于扩展 缺点:架构复杂,运维成本大 微服务治治理 异步通信技术 缓存技术 搜索技术 devops 微服务 微服务是分布式架构一种较好的实践,常见的微服务技术是sprin ...

  8. 分布式架构相关概念介绍

    集群 不同的人做同一件事情的同一部分为了同一个目的,如同一个公司的两个java程序员就是集群,如相同的代码部署到不同服务器就是集群. 负载均衡 负载均衡对应的就是集群,协调集群中单个服务器的处理量,例 ...

  9. Kafka 背景及架构介绍

    最近一直太忙,一直没有更新,今天更新一点知识点 Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处 ...

  10. Kafka系列之:详细介绍部署Kafka Connect分布式集群

    Kafka系列之:详细介绍部署Kafka Connect分布式集群 一.部署分布式Kafka集群详细步骤 二.Kafka Worker节点安装部署Kafka 三.修改connect-distribut ...

最新文章

  1. java迭代器创建后mutx锁,java集合【5】—— Collections接口源码解析
  2. 总监调岗至前台,企业被判赔偿26万,法院:“侮辱性调岗”违法
  3. 给初恋女孩的信....
  4. 洛谷 P3332 [ZJOI2013]K大数查询 解题报告
  5. 一个有意思的js小问题
  6. android 中国通信乱码问题
  7. SharePoint 2007 Select People and Groups中搜索不到其他Domain账户的问题[已解决]
  8. 计算机专业大学四年应该怎么过才有意义?
  9. 一个解决方案创建多个项目问题解决方案
  10. 新冠状病毒显微放大品质背景,让你做相关项目更具专业性。
  11. JSP和Servlet相同点和不同点?
  12. nginx解决浏览器跨域问题_使用nginx解决浏览器跨域
  13. Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法...
  14. qq家园纵横四海的源码
  15. 2022年湖北师范大学招生简章--成人高等教育高起专、专升本学历提升
  16. nginx 屏蔽某些ip,防止有些人刷接口攻击
  17. 工业互联网是什么,和工业4.0对比,有什么区别?
  18. Webshell(网页后门)
  19. Filter 过滤器接口详解
  20. 在线浏览pdf doc html,前端实现在线预览pdf、word、xls、ppt等文件

热门文章

  1. java程序设计与实践教程 王薇 doc_Java程序设计与实践教程 王薇主编 答案
  2. 训练的神经网络不工作?一文带你跨过这37个坑
  3. spring-cloud搭建
  4. linux中安装软件,查看、卸载已安装软件方法
  5. 文件得编码和文件名的编码是不一样的
  6. 如何快糙好猛的使用Shiqi.Yu老师的公开人脸检测库(附源码)
  7. EasyUI加载外部页面需要使用html片段
  8. MonoRail - 简介 [基础知识篇]
  9. 点/线/面 等 几何关系运算 的网页 推荐+备忘
  10. 设置在VS2005的IDE中迅速打开xaml文件