白面系列 kafka
kafka是一个分布式发布订阅消息系统,也可叫做MQ系统,MQ是Message Queue,消息队列。
通俗点,生产者往队列里写消息,消费者从队列里读。专业点,Producer通过TCP协议发送消息到Kafka集群,Kafka集群再将这些消息提供给Consumer。
消息是由key、value、时间戳构成,按topic分类。工作中经常听到的topic,就是这个topic,用来给消息分类。
整体流程如官网画的图所示。
kafka有个Broker的概念,指的就是集群中的服务器,每一个服务器就是一个代理(Broker)。
消费者往往按需分成多个组,称为消费者组(consumer group)。
kafka通过topic的partition来解决消息异步传递造成并行消费的问题。
每个partition有一个leader,零或多个follower。Leader处理此分区的所有的读写请求,而follower被动的复制数据。若Leader down掉了,从follower中产生新的Leader。一个Broker可能同时是一个分区的leader,另一个分区的follower。
生产者发topic发哪个分区呢?最简单的方式是从分区列表中轮流选择。也可以按特定算法来选分区。
消息有2种模式,队列式和发布-订阅式。队列,一条消息只有1个消费者处理。发布-订阅,消息广播给所有消费者,收到消息的消费者都可以来处理。
分区中的消息都被分了一个序列号,称之为偏移量(offset)。
消费者所持有的数据就是这个offset。这是由消费者自己设置的,这样就能读历史消息。
最多一次 --- 消息可能丢失,但绝不会重发。
至少一次 --- 消息绝不会丢失,但有可能重新发送。
正好一次 --- 每个消息传递一次且仅一次。
kafka默认是“至少一次”。通过禁止生产者重试实现 “最多一次”。通过偏移量实现“正好一次”。
kafka不会立即删除已消费的消息,具体什么时候删除是由Broker配置决定的。
版权申明:本文为博主原创文章,转载请保留原文链接及作者。
白面系列 kafka的更多相关文章
- Kafka实战系列--Kafka API使用体验
前言: kafka是linkedin开源的消息队列, 淘宝的metaq就是基于kafka而研发. 而消息队列作为一个分布式组件, 在服务解耦/异步化, 扮演非常重要的角色. 本系列主要研究kafka的 ...
- Kafka实战系列--Kafka的安装/配置
*) 安装和测试 cd /path/to/server#) 下载kafka二进制包wget http://apache.fayea.com/apache-mirror/kafka/0.8.1.1/ka ...
- Kafka科普系列 | Kafka中的事务是什么样子的?
事务,对于大家来说可能并不陌生,比如数据库事务.分布式事务,那么Kafka中的事务是什么样子的呢? 在说Kafka的事务之前,先要说一下Kafka中幂等的实现.幂等和事务是Kafka 0.11.0.0 ...
- 白面系列 docker
在讲docker之前,首先区分2个概念,容器和虚拟机. 容器: 虚拟机: 简单来说,容器虚拟化操作系统:虚拟机虚拟化硬件. 容器粒度更小更灵活:虚拟机包含资源更多更大. docker就是用来做容器化的 ...
- 白面系列 mongoDB
mongoDB和redis一样,都是noSQL技术之一. redis是Key-Value存储,mongoDB是文档存储. 文档存储一般用类似json的格式存储,存储的内容是文档型的.文档是一组键值(k ...
- 白面系列 redis
redis是Key-Value数据库,和Memcached类似.value可以是多种类型,如Strings, Lists, Hashes, Sets 及 Ordered Sets等. redis一个牛 ...
- 白面系列 nginx
Nginx == engine x. nginx就是一个服务器.主要提供web服务.负载均衡(反向代理).web缓存等服务. nginx ≈ apache,但nginx是轻量级的高性能高并发的服务器. ...
- 消息队列 概念 配合SpringBoot使用Demo
转http://www.jianshu.com/p/048e954dab40 概念: 分布式消息队列 ‘分布式消息队列’包含两个概念 一是‘消息队列’,二是‘分布式’ 那么就先看下消息队列的概念,和为 ...
- 撒花,推荐一下我怒肝的 GitHub
缘起 之前一直有很多小伙伴们找我,让我聊一聊如何学习 Java ,我都直接回复了一个思维导图,后来想一想觉得回答不是很认真,我的初衷是想让小伙伴们根据思维导图中的知识点,采取各个击破 的原则,哪里不会 ...
随机推荐
- 安装nanomsg
xftp上传nanomsg安装包 1.解压安装包tar -xvf nanomsg-1.1.0.tar 进入目录cd nanomsg-1.1.0新建安装目录(在nanomsg-1.1.0目录下)mkdi ...
- python3-cookbook笔记:第七章 函数
python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...
- request.getParameterMap获取不到数据问题
最近在做javaweb项目的过程中发现使用request.getParameterMap( )方法获取jsp页面中的表单数据的时候发现获取不到,检查了好长时间最后发现问题是在jsp页面中. reque ...
- imx6ull+debian10 构建静态qt交叉编译环境
# PC:Ubuntu18.04# GCC: arm-linux-gnueabihf- 7.4.0# 开发板:# imx6ull+debian10(文件系统为野火提供的) # 此处需要编译的是带gst ...
- STL专题
一.algorithm 1.sort 问题1:给你n个整数,请按从大到小的顺序输出其中前m大的数. Input:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二 ...
- 消息驱动微服务:Spring Cloud Stream
最近在学习Spring Cloud的知识,现将消息驱动微服务:Spring Cloud Stream 的相关知识笔记整理如下.[采用 oneNote格式排版]
- 刷题79. Word Search
一.题目说明 题目79. Word Search,给定一个由字符组成的矩阵,从矩阵中查找一个字符串是否存在.可以连续横.纵找.不能重复使用,难度是Medium. 二.我的解答 惭愧,我写了很久总是有问 ...
- Oracle12c传统数据库模式 OGG
OGG12C 配置 环境配置: 安装数据库Oracle12c 安装源端OGG:oggs PORT:7809 安装目标端OGG:oggt PORT:7909 源端和目标端地址:127.0.0.1 ...
- P1001 A+B Problem(int,long long)
题目描述 输入两个整数 a,b,输出它们的和(∣a∣,∣b∣≤109). 注意 Pascal 使用 integer 会爆掉哦! 有负数哦! C/C++ 的 main 函数必须是 int 类型,而且最后 ...
- windows 停止和启动Redis
点击win+R 输入cmd 打开cmd窗口 然后输入命令 net stop redis 停止redis net start redis 启动redis