Kafka 被称为“分布式提交日志”或“分布式流平台”

  文件系统或数据库提交日志用来提供所有事务的持久记录,通过重放这些日志重建系统状态,同时Kafka数据是按照一定顺序持久化保存的,可以按需读取

  Kafka数据分布在整个系统里,具有数据保障和性能伸缩能力

Kafka数据单元称为消息,类似于数据库里的行,消息由字节数组组成,里边的数据没有特殊含义;消息有一个可选的元数据----键(字节数组),当消息以一种

  可控的方式写入不同分区时,会用到键,保证相同键的消息总是写到相同的分区上

为提高效率,Kafka分批次写入Kafka,批次是一组消息,这些消息属于同一个主题和分区,批次越大,单位时间内处理消息越多,单个消息处理时间越长,批次数据会

  被压缩

Kafka的消息通过主题进行分类,主题类似于数据库的表,主题可以分为若干分区,一个分区就是一个提交日志,消息以追加方式写入分区,以先入先出方式读取

注意: 一个主题有几个分区,无法保证主题范围内消息的顺序,但是可以保证分区内的消息顺序

分区可以分布在不同的服务器上,即一个主题可以横跨多个服务器,以此提供比单个服务器更强大的性能

人们通常会使用流来描述Kafka系统的数据,很多时候一个主题可以看作一个流,不管多少分区,流是从一组生产者移动到消费者的数据

Kafka的客户端就是Kafka系统的用户,他们被分为2种类型:生产者和消费者

生产者创建消息,默认情况下,生产者会把消息均衡的分布到主题的所有分区上,而并不关心消息会被写到哪个分区上

生产者可以指定消息写到特定分区,通过消息键和分区器实现;分区器为键生成一个散列值,并映射到指定分区上,这样可以保证同一个键的消息可以写到同一个分区上

消费者读取消息,消费者可以订阅一个或多个主题,按照生成顺序读取,通过检查消息的偏移量区分已经都去过的消息;偏移量是一个元数据,是不断递增的,在创建消息时,会添加到消息里,在给定分区里,每个消息的偏移量是唯一的,消费者会把每个分区最后读取的消息偏移量保存在Zookeeper或Kafka上,若果消费者关闭或重启,读取的状态不会丢失

消费者是消费者群组的一部分,多个消费者共同读取一个主题时,群组保证每个分区只能被一个消费者使用。消费者与分区之间的映射关系被称为消费者对分区的所有权关系

消费者可以消费包含大量消息的主题,如果一个消费者失效,其余的消费者可以接管失效的消费者工作

一个独立的Kafka服务器称为broker,broker接收生产者的消息,为消息设置偏移量,并提交消息到磁盘保存;broker为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消息

broker是集群的组成部分,每个集群都有一个broker被选举为集群控制器角色,控制器负责管理工作,包括将分区分配给broker和监控broker;在集群中,一个分区从属于一个broker(分区的首领);一个分区可以分配给多个broker,这时会发生分区复制,这种复制机制为分区提供了消息冗余,一个broker失效,其他broker可以接管领导权;相关的消费者和生产者都重新连接到新的首领

Kafka有一个重要特性:保留消息

默认保留策略是:保留一段时间(7天)或者保留到一定大小字节数,当达到这些条件时旧消息就会被删除

主题可以配置自己的保留策略

基于以下原因,建议使用多集群: 数据类型分离    安全需求隔离   多数据中心(灾难恢复)

Kafka提供了一个MirrorMaker工具用来实现集群间的消息复制,Mirror Maker的核心组件包含一个消费者和生产者,二者之间通过一个队列相连

消费者从一个集群读取消息,生产者把消息发送到另一个集群上

Kafka可以无缝支持多个多个生产者,适合从多个前端收集数据,以统一格式对外提供数据

Kafka支持多个消费者从单独一个消息流上读取数据,而且消费者之间互不影响

Kafka允许消费者非实时读取消息,这要归功于Kafka数据保留特性,消息提交到磁盘,根据保留规则保存,消费者可以从上次中断的地方继续处理消息

Kafka笔记1(初步认识)的更多相关文章

  1. Kafka笔记整理(三):消费形式验证与性能测试

    Kafka消费形式验证 前面的<Kafka笔记整理(一)>中有提到消费者的消费形式,说明如下: .每个consumer属于一个consumer group,可以指定组id.group.id ...

  2. Kafka笔记整理(一)

    Kafka简介 消息队列(Message Queue) 消息 Message 网络中的两台计算机或者两个通讯设备之间传递的数据.例如说:文本.音乐.视频等内容. 队列 Queue 一种特殊的线性表(数 ...

  3. Kafka笔记—可靠性、幂等性和事务

    这几天很忙,但是我现在给我的要求是一周至少要出一篇文章,所以先拿这篇笔记来做开胃菜,源码分析估计明后两天应该能写一篇.给自己加油~,即使没什么人看. 可靠性 如何保证消息不丢失 Kafka只对&quo ...

  4. Kafka笔记

    最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下. kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列.它主要由三个部分组成,prod ...

  5. Android_Mars学习笔记_S01_001activity初步

    一.activity初步 1.程序启动会先读配置文件AndroidManifest.xml找activity 2.activity会在onCreate方法中读取activity_main.xml文件, ...

  6. kafka笔记-Kafka在zookeeper中的存储结构【转】

    参考链接:apache kafka系列之在zookeeper中存储结构  http://blog.csdn.net/lizhitao/article/details/23744675 1.topic注 ...

  7. Kafka笔记--指定消息的partition规则

    参数的设定:参考资料 不错的资料:http://blog.csdn.net/honglei915/article/details/37697655 http://developer.51cto.com ...

  8. Kafka笔记--监控系统KafkaOffsetMonitor

    KafkaOffsetMonitor下载链接: http://download.csdn.net/detail/changong28/7930337github官方:https://github.co ...

  9. Kafka笔记--使用ubuntu为bocker(服务器)windows做producer和comsumer(客户端)

    原文连接:http://www.cnblogs.com/davidwang456/p/4201875.html 程序仍然使用之前的一篇博文中的例子 :http://www.cnblogs.com/gn ...

随机推荐

  1. 把去世的亲友做成聊天机器人,就能让生者慰藉、死者安息吗? - 看了 寻梦历险记,我的回答是 :是的,他/她永远活在我们心里 www.iremember.com.cn

    AppU 如今的我们,之所以离不开手机和互联网,是因为它们确实可以带来信息和方便,让我们轻松记录并分享自己的生活体验,留下了充满回忆的各种文字.语音,各种图片.视频…… 但你有没有想过,当我们逝世时, ...

  2. ROS工作空间和程序包创建

    预备工作后面操作中我们将会用到ros-tutorials程序包,请先安装: $ sudo apt-get install ros-<distro>-ros-tutorials 将 < ...

  3. Linux 下MQ的安装和配置亲测

    开篇之前奉上几条黄金链接: MQ参考文档 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0m0/index.jsp?topic=%2Fcom.ib ...

  4. phpmyadmin 上传超过50m限制

    sql文件太大(达到400m),导致无法正常导入.需要修改php,nginx的配置文件 php.ini配置 post_max_size = 500M upload_max_filesize = 500 ...

  5. 2. ansible-playbook 条件语句-内部变量使用

    内部变量指的是把变量定义在playbook里面或者是执行结果作为变量 循环语句-标准Loops [root@LeoDevops playb]# cat p_loop.yaml - hosts: u12 ...

  6. Android remount命令的两种写法

    不同系统的参数格式可能不一样,而且可能没有--help打印,记录一下: mount -o remount -rw /system mount -o remount,rw /system

  7. docker-compose & docker 镜像/加速

    docker-compose: http://sanwen.net/a/nuwruoo.html docker加速: http://guide.daocloud.io/dcs/daocloud-915 ...

  8. Python——rrdtool模块的安装

    一.Centos环境yum命令安装 yum install rrdtool rrdtool-devel 二.源码安装 wget https://pypi.python.org/packages/99/ ...

  9. Date类型与字符串之间的转换

    Java中Date类型与字符串转化   (一)Date与字符串的转化   Date.String.Timestamp之间的转换!   public static void main(String[]  ...

  10. macOS Sierra上面的php开发环境安装

    本文参考资料: 启动apache时,解决  How to Fix AH00558 and AH00557 httpd apr_sockaddr_info_get() Error Message     ...