【消息中间件】kafka技术探秘
kafka
文章目录
- kafka
- 前言:kafka设计
- kafka相关概念
- kafka与其他消息中间件相比,优劣势
- kafka操作指令
- 问题思索
前言:kafka设计
磁盘顺序读写
kafka
的消息是顺序写到磁盘文件的末尾,以此能提升写入性能。topic
的每个分区都是一个文件,收到消息,kafka
会把消息插入到文件的末尾。
每个消费者对其订阅的topic
都有一个offset
来表示读取到了第几条数据。页缓存
利用操作系统本身的
page cache
来优化读写性能,kafka
的读写基于内存,速度快零拷贝
减少应用程序与操作系统上下文切换
分区分段 + 索引
kafka
的消息按topic
分类存放,一个topic
的消息又是可以存放到多个partition
,每个分区对应一个broker
节点,这个符合分布式系统的设计思想。
每个分区又会分段,消息实际上存放在各个分区的segment
上,每次文件操作就是操作这个segment
,为了进一步的优化,kafka
为每个分段文件建立一个索引文件。这种设计提高了读取速率,同时也提高数据操作的并行度。
批量读写
写入消息时,启用批次写入,这样可以避免在网络中频繁网络请求,提高吞吐量;
//默认16kb,不宜过大,过大会有延迟 batch.size=16384
批量压缩
//设置发送消息的缓冲区大小,默认32M buffer.memory=33554432 //开启gzip压缩,减少网络`io`损耗 compression-type: gzip
批量读写和批量压缩都是
kafka
提高吞吐量的设计优点。
kafka相关概念
broker:存储消息
producer:生产者,发送消息
consumer:消费消息,完成消息的读取及后续的业务处理
consumer group:消费者组,管理一组消费者,同组消费者可以消费订阅的同一个主题的消息。
group coordinator:每个消费者组会选择一个
broker
来监控消费者组里面各个消费者的心跳情况,以及判断是否宕机,这个broker
就是coordinator
hash(groupId)/partition
,找到分区所在的broker
,作为coordinator
rebalance
:策略: (1)
range
策略,按照分区范围进行消费 (2)
round-robin
,轮询 (3)
sticky
策略,尽量不懂属于原本消费者消费的分区,把空闲多余的分区在分配给各个存活的消费者topic(逻辑上的概念)消息按
topic
进行分类partition(分区,这个是真实的物理概念,每个分区都在不同的服务器上),对
topic
设置多个partition
,所有的消息都会不断地追加到partition
日志文件的末端,且每套消息都有自己的offset
文件存储:
.log
文件(存储消息).index
文件,用来定位消息offset
消息相对偏移量
ack
:[all, -1, 0, 1]
//0:请求发出去,不保证消息发送成功;1:leader partition写成功;-1:ISR列表里面,所有副本写入完成,这条消息才算发送成功 kafka.producer.acks=1
ISR
保持同步的副本
一个
leader partition
会维护一个ISR
列表为了保证生产者发送消息成功,
topic
的每个分区在收到消息后,都要向producer
发送ack
消息确认,生产者收到ack
就会发送下一个消息,否则重新发送acks=all
集群副本同步主节点的消息成功,则发送ack
,这样即使主节点挂掉,从节点也能及时选出新的主节点。
kafka与其他消息中间件相比,优劣势
吞吐量高。
tps
达到百万单机支持的队列数不能过多
不支持消息查询
消息回溯
不支持
broker
端类似tag
的消息过滤
kafka操作指令
./kafka-topics.sh --describe --zookeeper ip:port --topic "topicname"
.kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --partitions 1 --replication-factor 1
问题思索
kafka
消息积压如何处理?分析原因:
(1)消费者服务中间出现宕机,在这段时间生产者源源不断在生产消息就会积压;
(2)消费者服务消费能力不足,需要增多消费者服务;
(3)消费线程触发死锁或者资源等待;
(4)消费者每次拉取消息的量太小,导致单位时间内生产的消息比消费的的消息量小,导致消息积压,需要加大拉取消息的量;
处理:短时间内需要扩容消费者实例数来处理积压消息
如何保证顺序消费消息?
(1)一个主题只创建一个分区;
(2)生产者指定分区发消息;
【消息中间件】kafka技术探秘相关推荐
- apache kafka技术分享系列(目录索引)--转载
原文地址:http://blog.csdn.net/lizhitao/article/details/39499283 kafka开发与管理: 1)apache kafka消息服务 2)kafak安装 ...
- 消息中间件 --- Kafka快速入门
消息中间件 --- Kafka 快速入门 消息中间件:https://blog.51cto.com/u_9291927/category33 GitHub: GitHub - scorpiostudi ...
- 消息中间件的技术选型心得-RabbitMQ ActiveMQ和ZeroMQ
消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...
- 高吞吐消息中间件Kafka集群环境搭建(3台kafka,3台zookeeper)
高吞吐消息中间件Kafka集群环境搭建(3台kafka,3台zookeeper) 一.集群搭建要求 1.搭建设计 2.分配六台Linux,用于安装拥有三个节点的Kafka集群和三个节点的Zookeep ...
- [DEV] 陷阱技术探秘 ──动态汉化Windows技术的分析
"陷阱"技术探秘 ──动态汉化Windows技术的分析 四通利方(RichWin).中文之星(CStar)是大家广为熟知的汉化Windows产品,"陷阱"技术即 ...
- 陷阱技术探秘 ----动态汉化Windows技术的分析
"陷阱"技术探秘 ──动态汉化Windows技术的分析 四通利方(RichWin).中文之星(CStar)是大家广为熟知的汉化Windows产品,"陷阱"技术即 ...
- 陷阱技术探秘 ──动态汉化Windows技术的分析
"陷阱"技术探秘 ──动态汉化Windows技术的分析 四通利方(RichWin).中文之星(CStar)是大家广为熟知的汉化Windows产品,"陷阱"技术即 ...
- 陷阱技术探秘 ──动态汉化Windows技术的分析 (转)
"陷阱"技术探秘 ──动态汉化Windows技术的分析 (转)[@more@] "陷阱"技术探秘 ──动态汉化windows技术的分析 四通利方(RichWin ...
- 微服务 消息中间件kafka消息丢失问题
微服务 消息中间件kafka消息丢失问题 1. kafka消息丢失概述 1.1 kafka概述 1.2 kafka架构 1.3 kafka问题 2. kafka消息传递语义 3. kafka消息丢失问 ...
最新文章
- Linux下bash的PS1
- Memcached学习---(1) 教程
- Discuz!NT实际安装流程
- Qt6程序打包(如何解决Qt程序在其他电脑上无法运行的问题)
- 都说人工智能入门难?但80%的人都错了……
- clickhouse 的mysql表引擎
- java异常处理:finally中不要return
- 转载:什么是良好的Verilog代码风格?(作者KellenWang)
- 深度学习网络架构(三):VGG
- robotframework 新建UI自动化测试用例实例一(2)
- STL Container
- Qt入门使用Qt编写程序详细全过程
- STM32程序下载1:通过keil-ST-Link方式下载
- 项目01——图书进、销、存(jxc)系统(单机版)
- Hibernate validator 官网前言中文版
- Origin源码阅读笔记——RPC
- PS网页设计_新手建站入门视频教程
- 01-css3动画之过渡详解 以及 实战纯css打造手风琴图片特效
- dubbo空指针异常
- Python 克莱姆法则求解方程组