Kafka是一个分布式的消息队列,学习见Apache Kafka文档,中文翻译见Kafka分享,一个简单的入门例子见kafka代码入门实例。本文只针对自己感兴趣的点记录下。

1.架构

Producer/Consumer:消息的生成者和使用者。
Broker:kafka server充当broker角色,起到消息队列的作用。
topic/partion:topic是一类消息的名称,一个topic下的消息可以分成多区(partion)存储,一个分区是一个有序队列(消息按接收时间依次追加,利用offset做为唯一id),分区间消息无序。
zookeeper:broker和consumer向zk注册,实现元数据的保存和交换、集群管理。
push/pull:producer通过一个初始broker.list与broker建立连接,获取所有broker信息,主动向一个topic的分区leader推送信息;consumer通过zk获取broker列表,主动从broker拉取信息。
consumer group:为了提高consumer处理并行性,多个consumer可以组成一个group,一个topic下的消息会保证每个group中的一个consumer消费,一个group中的consumer交错消费整个topic。简单说,topic下的一条消息会给所有的group,但一个group中只有一个consumer接收到该消息。

2.数据存储与备份

一个机子存储不下一个topic时,如何做?又如何做消息冗余备份呢?
这就是分区的目的,在创建topic时可以指定其分区数、备份数,消息会被hash到不同的分区存储(其hash过程由producer在客户端处理),每个分区有自己的机器。
如上,该kafka集群有3个broker(3个节点),名字为my-replicated-topic-1的topic有4个partition,每个partition有2个replica(每条消息备份2次,每个replica位于不同的节点),一个partion有一个leader负责该partition内的数据读写。producer根据消息的key hash到一个partition后,直接和该partition的leader通信。
其中ISR(in-sync replicas)同步列表是该partition中处于同步状态的备份broker,如果一个broker长时间不和leader通信,或者消息数与leader相差太大,leader就会将该broker从ISR队列中移除,该broker就会后台从leader fetch数据,直到up-to-date,然后再次加入ISR同步列表。
这些patition、replica信息与状态都存储在zookeeper中,便于leader重新选举和信息同步。
待续
待读:https://cwiki.apache.org/confluence/display/KAFKA/FAQ;http://www.jasongj.com/2015/03/10/KafkaColumn1/

消息队列-Kafka学习的更多相关文章

  1. 消息队列Kafka学习记录

    Kafka其实只是众多消息队列中的一种,对于Kafka的具体释义我这里就不多说了,详见:http://baike.baidu.com/link?url=HWFYszYuMdP_lueFH5bmYnlm ...

  2. 分布式消息队列 Kafka

    分布式消息队列 Kafka 2016-02-25 杜亦舒 Kafka是一个高吞吐量的.分布式的消息系统,由Linkedin开发,开发语言为scala具有高吞吐.可扩展.分布式等特点 适用场景 活动数据 ...

  3. 消息队列kafka

    消息队列kafka   为什么用消息队列 举例 比如在一个企业里,技术老大接到boss的任务,技术老大把这个任务拆分成多个小任务,完成所有的小任务就算搞定整个任务了. 那么在执行这些小任务的时候,可能 ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  6. 基于Docker搭建分布式消息队列Kafka

    本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示.本例搭建的 ...

  7. (转)消息队列 Kafka 的基本知识及 .NET Core 客户端

    原文地址:https://www.cnblogs.com/savorboard/p/dotnetcore-kafka.html 前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是 ...

  8. Kafka 消息队列系列之分布式消息队列Kafka

    介绍 ApacheKafka®是一个分布式流媒体平台.这到底是什么意思呢?我们认为流媒体平台具有三个关键功能:它可以让你发布和订阅记录流.在这方面,它类似于消​​息队列或企业消息传递系统.它允许您以容 ...

  9. 消息队列——Kafka基本使用及原理分析

    文章目录 一.什么是Kafka 二.Kafka的基本使用 1. 单机环境搭建及命令行的基本使用 2. 集群搭建 3. Java API的基本使用 三.Kafka原理浅析 1. topic和partit ...

随机推荐

  1. ATL 获取flash信息

    // This goes past the ATL includes #import "C:/WINDOWS/system32/Macromed/Flash/Flash9e.ocx" ...

  2. Entity Framework 6, database-first with Oracle

    Entity Framework 6, database-first with Oracle 转载自http://csharp.today/entity-framework-6-database-fi ...

  3. Server.mappath用法

    1.Server.MapPath ("/") 应用程序根目录所在的位置 如 C:\qq\qqroot\ 2.Server.MapPath ("./") 表示所在 ...

  4. asp.net(C#) Excel导出类 导出.xls文件

    ---恢复内容开始--- using Microsoft.Office.Interop.Excel; 针对office 2003需添加引用Microsoft   Excel   11.0   Obje ...

  5. 15.Xcode8 升级遇到的问题

    一:注释快捷键cmd+/不能用,解决方法: 1. Swift_3.0 没法快捷键(command+/)注释的原因:这个是因为苹果解决xcode ghost,把插件屏蔽了. 2. 解决办法: (1) 终 ...

  6. where和having子句的区别

    having子句可以让我们筛选成组后的各种数据,having子句在查询过程中慢于聚合语句 having的用法 having子句可以让我们筛选成组后的各种数据,having子句在查询过程中慢于聚合语句( ...

  7. Java读取文件的几种方式

    package com.mesopotamia.test; import java.io.BufferedReader; import java.io.ByteArrayInputStream; im ...

  8. poj 2482 Stars in Your Window (线段树:区间更新)

    题目链接:http://poj.org/problem?id=2482 读完题干不免有些心酸(

  9. CSS3多列

    CSS3多列,通过创建列对页面内容进行布局,轻松实现类似Pinterest.花瓣的瀑布流式布局. 主要包含: column-count  列数 column-gap     列间宽度 column-r ...

  10. [Leetcode][JAVA] Path Sum I && II

    Path Sum Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that addi ...