kafka 消息队列相关总结

前段时间,项目中使用了kafka,一开始对很多概念不是很清楚,前前后后看了好多博客,这里简单总结一下相关知识。从以下几个方面。

  1. kafka 相关基础概念说明,这里会解释一些个人认为比较重要的名词。
  2. kafka 生产者生产和消费的逻辑,这里主要是写几种使用consumer和producer的方法。
  3. kafka 的特性,简单总结一些 kafka 原理层面的东西。

1、基础概念

broker:kafka集群中的一个节点,简单理解成一台机器。topic在创建时可以partition数和replicas(副本数),如果指定为多副本,那么这个topic的partition,就会在不同的broker上有备份。但是只有leader broker 负责读写,其他副本broker只负责和leader进行同步。

topic:消息主题。一个topic下面会有多个分区partition,每个partition是存储消息的一个物理单元。

partition:kafka存储消息的物理单元。

producer & consumer:生产者--往kafka里写消息的角色;消费者--从队列里消费消息的角色。

cosumer group:消费组,topic 下的一个partition会指定给group下的一个consumer去消费。可以通过group的方式,实现topic下消息并行的被消费掉,提高消费效率。

2、生产消费的逻辑

生产者逻辑:

kafka的生产是针对partition的,且有负载均衡的效果,即通过一定的策略将消息分发到topic下的不同partition去。在apache.kafka.client 提供的接口中,我们可以有三种方式来构造消息。当指定partition时,生产者会将消息丢到制定的partition下面。当仅指定消息的value值,消息会按照轮询的方式分发到topic下的不同partition里。当指定key和value时,会根据key值把消息hash到一个partition去。

消费者逻辑:

kafka一个topic的并行消费主要通过多个partition和group来实现。一个partition只能被一个group中的一个consumer绑定消费,这句话的另一个含义是假如一个topic下面有n个partition,那么一个group下如果有超过n个消费者的话,就会有消费者是空闲状态的,不会消费任何消息。如果group下的consumer数小于n的话,就会有consumer是消费了多个partition的,此时就可以新增consumer,kafka会重新调整partition的分配。

3、kafka的特性——高可靠、高吞吐

高可靠:kafka可以部署成集群。针对partition,kafka维护了一个同步副本列表,这个列表中的broker都是可用的,且和负责读写的leaderbroker消息数相差很小。当leader节点挂掉,同步副本列表中的其他节点会成为leader来承担读写消息的任务。kafka通过这样的一些设计保证了broker之间的数据同步,也就使它具备了高可靠的特性。这篇文章可以参考一下,写的很详细:https://blog.csdn.net/gongzhiyao3739124/article/details/79688813

高性能,主要有以下三个技术:

        a、零拷贝技术,主要是减少由文件发送到网络的复制次数来减少上下文切换。这个链接是原文出处,里面提供了测试的代码,我找了台linux机子测试过,发送文件有很大的效率提升。https://developer.ibm.com/articles/j-zerocopy/

        b、批量发送(通过批量发送减少网络IO请求)

        c、kafka可以进行消息的压缩

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值