kafka系列(1):Kafka设计与应用

kafka在消息的吞吐上还是有明显的优势;非常适合一些数据集成和交换的场景;社区后续会发一系列kafka的文章,供大家参考学习,希望大家喜欢。

Kafka基础介绍

Kafka是LinkedIn在2010年开发的分布式消息系统• 使用于LinkedIn的活动流和运营数据处理的管道

• 使用Scala&Java语言编写

• 并于2011年成为Apache的开源项目

• 具有分布式/高性能/高吞吐/水平扩展等特性• 支持发布/订阅&点对点模式的分布式消息系统

• 0.9之后支持StreamsAPI

• 支持主流编程语言的API调用[C++/Python/Go/Ruby/PHP/…]

Kafka版本演进(一)

kafka版本演进(二)

Kafka基础概念

Kafka的优点及场景(一)

分布式/可分区,具有消息复制和容错系统 [可靠性]

- 可以水平扩展,对不同Topic的不同处理 [扩展性]

- 发送和消息具有高吞吐量,压测最低10w/s主要瓶颈在网络IO[高性能]

- 支持批量消费,批量提交offset,快速落盘 [高可用性]

优点及场景(二)

监控系统

处理可监控的数据,可实时进行消息的处理计算

日志处理

Application 批量,异步发送日志/行为数据

流式处理

可以流式读取数据,支持Storm/Spark/Kafka Steaming

消息得生产实例&原理(一)

生产者-发送/发布消息的一端

消息的生产&原理(二)

消息的生产&原理(三)

消息的消费实例&原理(一)

消息的消费实例&原理(二)

消费规则:

一个Partition只能被同一个ConsumerGroup的一个线程消费

线程数小于partition数,可能会消费多个Partition

同一个partition保证是有序消费的

0.9之前consumer依赖zk,0.9之后直接链接kafka的Coordinator

消息的消费&原理(三)

数据的持久化机制-PARTITION

Kafka数据存储单元-Partition

一个Partition对应一个文件夹

Partition中分为多个Segment

Segment的命名为offset.logSegment对应一个ofset.Index文件[记录offset的磁盘位置]

数据存储结构

数据存储示意图:

Segment file中index与log文件的对应关系图 [摘自网络]

Message物理结构图

Kafka 消息传递保证

At most once [最多一次]

At least once [至少一次]

Exacty once [正好一次]

Kafka 默认机制是 At least once ,用户可以选择处理一批数据之后批量提交offset来实现“Exacty once”

副本因子(REPLICATION)

Kafka将每个Partition复制到多个Server上,每一个Partition都有一个leader和多个follower[多机备份]

当一个leader挂掉之后,通过选举选择follower中一个作为leader[去中心化]

ZK中通过ISR维护着所有Follower,Follower通过Tcp与ZK保持心跳

副本因子

KAFKA逻辑架构设计

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180306G05X1D00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券