学习
实践
活动
工具
TVP
写文章

Apache Kafka核心概念入门

简介

Apache Kafka是一款基于日志的消息系统,后来Kafka发展成为了一个“distributed streaming platform”,包含了消息系统,存储系统和流处理系统三个功能。

核心特性:

发布订阅模式的消息系统

持久化存储(commit log)数据

在输入输出过程中实现流数据的转换

核心概念

分布式集群,消息存储副本

按照topic存储同一类型数据

每一条记录包含key,value和时间戳

核心API

生产者,负责推送数据到相应的Topic

消费者,订阅相关Topic,并进行消费

Stream API,在Kafka的输入和输出间进行相应转换

Connector API,包装了一层可复用的生产者和消费者代码

Topics and Logs

Topics是记录着生产者产生的同一类型数据,一个Topic可以有很多个订阅者。对于每个Topic都会维护着相应的partition,每一个partition都可以理解为一个日志(有序不可变只增持久化),每一条在partition的记录都会有一个序列ID(offset)和相应的有效期。消费者可以控制offset,拥有着决定权(意味着你可以从选择从一个特定的老offset消费),而Kafka的元数据会维护每个消费者当前消费的offset。使用partition的好处在于可以将一个Topic的数据分布到多个服务器,根据数据大小进行良好的切分。

Distribution

使用主从复制模式,基于Zookeeper的分布式算法实现一致性。

Geo-Replication

跨数据中心复制

Producers

生产数据到对应的partition,并且拥有Topic里的partition的选择权

Consumers

Consumer可以组成一个Consumer组,当所有的Consumer都在一个组里的时候,消息会根据复杂发到其中一个Consumer上,而拥有不同的组时,则是广播到所有的Consumer组其中一个Consumer。引入Consumer组的原因是为了容错,一旦组里的一个Consumer挂了,挂了的Consumer对应的partition会分配给其它的Consumer,当一个新的Consumer加入时会分担组内的消费partition的压力。相比于传统的queue,Consumer组弥补了一个queue里的数据一旦消费便不可复现的问题。但是Kafka只提供了单个Partition的有序性,而不保证多个Partition之间数据的有序性,所以要实现有序就必须保证一个Topic就只有一个Partition,而每一个Consumer组只有一个Consumer。

可靠性

确保同一个生产者发布的消息在Topic的单个partition是有序的。

一个消费者收到的消息与日志顺序相同。

当一个Topic拥有N个副本时,可以容忍N-1个副本的丢失。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180819G1GOPP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券