一、简介

1、简介

简 介
• Kafka是Linkedin于2010年12月份开源的消息系统
• 一种分布式的、基于发布/订阅的消息系统

2、特点

– 消息持久化:通过O(1)的磁盘数据结构提供数据的持久化
– 高吞吐量:每秒百万级的消息读写
– 分布式:扩展能力强
– 多客户端支持:java、php、python、c++ ……
– 实时性:生产者生产的message立即被消费者可见

3、基本组件

• Broker:每一台机器叫一个Broker
• Producer:日志消息生产者,用来写数据
• Consumer:消息的消费者,用来读数据
• Topic:不同消费者去指定的Topic中读,不同的生产者往不同的Topic中写
• Partition:新版本才支持Partition,在Topic基础上做了进一步区分分层

好处二:动态导入模块(基于反射当前模块成员)

注意:

• Kafka内部是分布式的、一个Kafka集群通常包括多个Broker
• 负载均衡:将Topic分成多个分区,每个Broker存储一个或多个Partition
• 多个Producer和Consumer同时生产和消费消息

4、Topic

• 一个Topic是一个用于发布消息的分类或feed名,kafka集群使用分区的日志,每个分区都是有顺序且不变的消息序列。

• commit的log可以不断追加。消息在每个分区中都分配了一个叫offset的id序列来唯一识别分区中的消息

• 举例:若创建topic1和topic2两个topic,且分别有13个和19个分区,则整个集群上会相应会生成共32个文件夹

注意:

• 无论发布的消息是否被消费,kafka都会持久化一定时间(可配置)。

• 在每个消费者都持久化这个offset在日志中。通常消费者读消息时会使offset值线性的增长,但实际上其位置是由消费者控制,它可以按任意顺序来消费消息。

比如复位到老的offset来重新处理。
• 每个分区代表一个并行单元。

5、Message

• message(消息)是通信的基本单位,每个producer可以向一个topic(主题)
发布一些消息。如果consumer订阅了这个主题,那么新发布的消息就会广播给
这些consumer。
• message format:
– message length : 4 bytes (value: 1+4+n)
– "magic" value : 1 byte
– crc : 4 bytes
– payload : n bytes

6、Producer

• 生产者可以发布数据到它指定的topic中,并可以指定在topic里哪些消息分配到哪些分区(比如简单的轮流分发各个分区或通过指定分区语义分配key到对应分

区)
• 生产者直接把消息发送给对应分区的broker,而不需要任何路由层。
• 批处理发送,当message积累到一定数量或等待一定时间后进行发送。

7、Consumer

• 一种更抽象的消费方式:消费组(consumer group)
• 该方式包含了传统的queue和发布订阅方式
    –  首先消费者标记自己一个消费组名。消息将投递到每个消费组中的某一个消费者实例上。
    –  如果所有的消费者实例都有相同的消费组,这样就像传统的queue方式。
    –  如果所有的消费者实例都有不同的消费组,这样就像传统的发布订阅方式。
    –  消费组就好比是个逻辑的订阅者,每个订阅者由许多消费者实例构成(用于扩展或容错)。
• 相对于传统的消息系统,kafka拥有更强壮的顺序保证。
• 由于topic采用了分区,可在多Consumer进程操作时保证顺序性和负载均衡。

大数据之路【第十篇】:kafka消息系统的更多相关文章

  1. Hadoop生态圈-大数据生态体系快速入门篇

    Hadoop生态圈-大数据生态体系快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.大数据概念 1>.什么是大数据 大数据(big data):是指无法在一定时间 ...

  2. CentOS6安装各种大数据软件 第五章:Kafka集群的配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  3. 为什么会有kafka消息系统?小问题藏着大细节!

    前言:老刘今天写这篇文章首先想对一些复制粘贴的博客表达不满:其次是想用通俗易懂的话解释消息系统:最后欢迎各位英雄好汉.女中豪杰前来battle. 1. 为什么有消息系统? 1.1 背景 今天复习kaf ...

  4. 大数据笔记(三十二)——SparkStreaming集成Kafka与Flume

    三.集成:数据源 1.Apache Kafka:一种高吞吐量的分布式发布订阅消息系统 (1) (*)消息的类型 Topic:主题(相当于:广播) Queue:队列(相当于:点对点) (*)常见的消息系 ...

  5. 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍

    引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文:  The NoSQL Ecosystem 目录 The NoSQL Eco ...

  6. C#码农的大数据之路 - 使用C#编写MR作业

    系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...

  7. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

  8. 大数据基础知识问答----hadoop篇

    handoop相关知识点 1.Hadoop是什么? Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速 ...

  9. 大数据竞赛平台——Kaggle 入门篇

    这篇文章适合那些刚接触Kaggle.想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文.本文分为两部分介绍Kaggle,第一部分简 ...

随机推荐

  1. datetime.now()提示没有now方法

    py3.6 导入方法是 from datetime import datetime 在使用datetime.now()的时候报错,说没有now 在保存module的create_time字段的时候,提 ...

  2. A1128 | 逻辑想象能力、简洁高效美观的代码、memset的使用情景

    写了三遍才AC,这真是对智商极大的侮辱 C++代码: #include <stdio.h> #include <memory.h> #include <math.h> ...

  3. mac 以多tab的方式打开

    让mac 始终以多tab的方式打开程序 背景: 开发中始终需要多个 项目 的方式进行处理, 但一直使用 `command + `` 的方式总是比较烦人, 有没有一个比较好的视图方式呢; 即我想在一个窗 ...

  4. python 整数转16进制数

    def toHex(num): """ :type num: int :rtype: str """ chaDic = {: : : : : ...

  5. TypeScript 真香系列——接口篇

    接口带来了什么好处 好处One —— 过去我们写 JavaScript JavaScript 中定义一个函数,用来获取一个用户的姓名和年龄的字符串: const getUserInfo = funct ...

  6. 【Gamma】Scrum Meeting 2

    目录 写在前面 进度情况 任务进度表 Gamma阶段燃尽图 遇到的困难 照片 写在前面 例会时间:5.26 22:30-23:00 例会地点:微信群语音通话 代码进度记录github在这里 临近期末, ...

  7. [技术博客]Android 开发 Bug Log

    [技术博客] Android 开发 Bug Log 大大小小的bug,聪明的愚蠢的都有, 持续记录中...... java.lang.IllegalArgumentException: The sty ...

  8. Seq2Seq模型 与 Attention 策略

    Seq2Seq模型 传统的机器翻译的方法往往是基于单词与短语的统计,以及复杂的语法结构来完成的.基于序列的方式,可以看成两步,分别是 Encoder 与 Decoder,Encoder 阶段就是将输入 ...

  9. RSA加密公钥系数获取结果多00

    写在前面 本文是在解决加密和解密用的不是同一套密钥对时找到的一篇, 最后问题不在byte数组, 是自己工具类中生成密钥对的问题, 但是本文RSA加密中公钥指数和公钥系数的获取(byte[]部分)讲解比 ...

  10. intellij idea远程调试

    有时候发布后的包不得不进行debug,但是又不方便本地开发环境直接debug模拟,所以不得不需要远程debug. 启动参数 首先在服务端使用JVM的-Xdebug参数启动Jar包. java -Xde ...