前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kafka介绍

Kafka介绍

作者头像
灰子学技术
发布2021-04-20 11:03:58
3570
发布2021-04-20 11:03:58
举报
文章被收录于专栏:灰子学技术灰子学技术

本篇文章是kafka的入门篇,主要介绍kafka一些基本的知识和架构,并没有涉及到一些原理的讲解,算是一篇入门文章。

一、kafka的特性

1.高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

2.可扩展性:kafka集群支持热扩展

3. 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

4. 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

5.高并发:支持数千个客户端同时读写

二、kafka的场景

1.消息队列:对于一些常规的消息系统,kafka是个不错的选择;partitons/replication和容错,可以使kafka具有良好的扩展性和性能优势。

2.kafka可以作为"网站活性跟踪"的最佳工具,可以将网页/用户操作等信息发送到kafka中,并实时监控,或者离线统计分析等行为。

3.日志收集: application可以将操作日志"批量""异步"的发送到kafka集群中,而不是保存在本地或者DB中。kafka可以批量提交消息/压缩消息等,这对producer端而言,几乎感觉不到性能的开支,此时consumer端可以使hadoop等其他系统化的存储和分析系统。

三、kafka介绍

kafka的拓扑关系图如下所示:

kafka由producer、broker、comsumer和zookeeper几部分构成,kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Cosumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。

无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。

1.Topic/logs

一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它是唯一标记一条消息,它唯一的标记一条消息。

每一条消息被发送到broker中,会根据partition规则选择被存储到哪一个partition。如果partition规则设置的合理,所有消息可以均匀分布到不同的partition里,这样就实现了水平扩展。(如果一个topic对应一个文件,那这个文件所在的机器I/O将会成为这个topic的性能瓶颈,而partition解决了这个问题)。

备注:可以通过配置文件中的参数来配置partition的数量 num.partitions=3

2.Producers

Producer将消息发布到指定的Topic中,同时Producer也能决定将此消息归属于哪个partition,比如基于"round-robin"方式。

3.Consumers

每个consumer属于一个consumer group,反过来说,每个group中可以有多个consumer。发送到Topic的消息,只会被订阅此Topic的每个group中的一个consumer消费。

如果所有的consumer都具有相同的group,这种情况和queue模式很像,消息将会在consumers之间负载均衡。

如果所有的consumer都具有不同的group,那这就是"发布-订阅",消息将会广播给所有的消费者。

在kafka中,一个partition中的消息只会被group中的一个consumer消费。

每个group中consumer消息消费互相独立;我们可以认为一个group是一个"订阅"者,一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以消费多个partitions中的消息。kafka只能保证一个partition中的消息被某个consumer消费时,消息是顺序的。而不同的partition之间的消息的顺序性是保证不了的。

4.zookeeper

zookeeper保存consumer和producer状态信息,kafka集群几乎不需要维护任何consumer和producer状态信息,这样producer和comsumer的实现就很轻量级,他们可以轻易的离开集群而不会对整个集群产生额外的影响。

代码语言:javascript
复制
zookeeper协调控制的事情:
1. 管理broker与consumer的动态加入与离开。(Producer不需要管理,随便一台计算机都可以作为Producer向Kakfa Broker发消息)
2. 触发负载均衡,当broker或consumer加入或离开时会触发负载均衡算法,使得一
   个consumer group内的多个consumer的消费负载平衡。(因为一个comsumer消费一个或多个partition,一个partition只能被一个consumer消费)
3.  维护消费关系及每个partition的消费信息。
实现方式:
1. 每个broker启动后会在zookeeper上注册一个临时的broker registry,包含broker的ip地址和端口号,所存储的topics和partitions信息。
2. 每个consumer启动后会在zookeeper上注册一个临时的consumer registry:包含consumer所属的consumer group以及订阅的topics。
3. 每个consumer group关联一个临时的owner registry和一个持久的offset registry。
对于被订阅的每个partition包含一个owner registry,内容为订阅这个partition的consumer id;
同时包含一个offset registry,内容为上一次订阅的offset。

参考资料:

1.https://www.cnblogs.com/likehua/p/3999538.html 2.https://honeypps.com/mq/deep-interpretation-of-kafka-data-reliability/

3.https://www.infoq.cn/article/kafka-analysis-part-1/

4.https://www.cnblogs.com/bbgasj/p/4176915.html

5.https://blog.csdn.net/u013573133/article/details/48142677

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档