Kafka的使用与特性怎么理解

技术Kafka的使用与特性怎么理解这篇文章主要讲解了“Kafka的使用与特性怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kafka的使用与特性怎么理解”吧!1、

本文主要讲解“如何理解卡夫卡的使用和特点”。本文的解释简单明了,易学易懂。现在,请跟随边肖的思路一起学习和学习《如何理解卡夫卡的使用和特点》!

1、面试官:可以简述下Kafka架构中比较重要的关键字吗?

比如Partition,Broker,怎么理解?

问题分析:Kafka基础知识,由于卡夫卡的出色表现,集群结构也有所不同。初学者可能不理解一些新的概念设计名称。要构建一个卡夫卡集群,首先需要理解话题、生产者、消费者和经纪人的概念。

我对答:卡夫卡做了一些深入的了解,它的设计理念还是值得借鉴的。有六个关键的名字概念,可以帮助我们更好地理解卡夫卡的工作机制。

Producer

消息的生产者,如确认用户已付款的支付系统,应通知订单系统和物流系统,支付系统为生产者。

Consumer

在生产者的情况下,物流系统是消费者,前两个相对简单,我就不多说了。

Topic

发布到MQ集群的每个消息都有一个类别。这个类别叫做主题,可以理解为一种消息的名称。的所有信息已按主题分类为一个单元。

Partition

卡夫卡的物理分区概念,每个主题将分散在一个或多个分区中。如果一个主题的数据太大,就会被分成小块。Kafka引入了分区的多副本模型,副本之间采用了“一个领导者,多个跟随者”的设计,可以通过多副本实现自动故障转移,保证可用性。

Broker:

它可以理解为服务器的一个节点,一个集群包含一个或多个服务器,称为代理。相应地,如果生产者发出消费,就会被忽略。消费者按照自己的速度慢慢消费。这期间可能会有很多消息,消费压力还是在一定范围内。生产者和消费者之间的解耦是缓存服务代理。

Kafka Cluster

集群是代理的集合,多个代理形成一个高可用性集群。

Producer 与 Consumer的关系

Kafka的使用与特性怎么理解

topic 和 Partition 的关系

一个topic可以有序地存放在多个Partition,每个Partition

Kafka的使用与特性怎么理解

当我到这里时,面试官没有打断我……所以我继续说。

00-1010 1.类似产品的功能这里不再一一列举,而是直接总结卡夫卡的独特功能:

2.与同类中间件RabbitMQ或ActiveMQ相比,Kafka支持批量拉取消息大大提高了Kafka的消息吞吐量。

支持多种发送场景:

1.送了就忘了。

2.同步发送。

3.异步发送回调函数。

虽然三种方法在时间上有差异,但并不意味着越快越好。具体使用哪种方法取决于具体的业务场景。例如,业务要求消息必须按顺序发送,并且可以使用第二个同步发送,并且只能在一个合作关系中使用。如果业务只关心消息的吞吐量,允许少量消息发送失败,不关心消息的发送顺序,那么可以使用发送并忘记。如果业务需要知道消息是否发送成功,不关心消息的顺序,可以通过异步回调发送消息。

3.分布式和高度可扩展。Kafka集群可以透明地扩展,向集群中添加新的服务器。

光说卡夫卡的优点,对其他同类产品不是不好吗?当然不是,存在就是真理,每一个产品都可以生存,都必须有自己的优势。比如RabbitMQ在吞吐量上略逊于卡夫卡,但他们的起点不同。RabbitMQ支持消息的可靠传递,支持事务,不支持批处理操作。在技术选择上,选择最适合自己、自己最了解的。

>

分布式 高性能 持久性和扩展性 支持多分区 高吞吐量 数据可持久化 支持多副本 低延迟 容错性高 支持多订阅者 高并发 支持水平在线扩展 基于ZooKeeper调度 时间复杂度为O(1) 消息分发自动平衡

言多必失,说了一堆 Kafka 相比其他产品有多好多快,终于成功给自己挖了一个坑。(?),顺着我的思路展开了问

2、面试官:那为什么Kafka的吞吐量远高于其他同类中间件?

问题分析:多年经验总结,面试中最吃亏的就是你把你不熟悉的东西写在简历上,还有就是你知道结果,不知其原理,源码没看过,好歹也要知道用了巧妙的设计。

答:Kafka 是一个高吞吐量分布式消息系统,并且提供了持久化。其高性能的有两个重要特点:

1.利用了磁盘连续读写性能远远高于随机读写的特点,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。

2.并发,将一个topic拆分多个partition, kafka读写的单位是partition,因此,将一个topic拆分为多个partition可以提高吞吐量。但是,这里有个前提,就是不同partition需要位于不同的磁盘(可以在同一个机器)。如果多个partition位于同一个磁盘,那么意味着有多个进程同时对一个磁盘的多个文件进行读写,使得操作系统会对磁盘读写进行频繁调度,也就是破坏了磁盘读写的连续性。
在linkedlin的测试中,每台机器就加载了6个磁盘,并且不做ra,就是为了充分利用多磁盘并发读写,又保证每个磁盘连续读写的特性。

Kafka的使用与特性怎么理解

同一个topic会被分散到多个分片上,并行处理。 

深入分析

Kafka 消息的生产与消费模型Demo

伪代码:使用KafKa客户端发送一条消息

public class MqProducer {
    private final Logger LOG = LoggerFactory.getLogger(MqProducer.class);
 
    @Resource
    private Producer payProducer;
 
    public void sendPayMsg(String msg) {
        try {
            LOG.debug("send msg:{}", msg);
            payProducer.send(msg);//发送出去一条消息。
        } catch (MQException e) {
            LOG.error("mq消息异常 message:{}", msg, e);
        }
    }
}

长什么样子?

即payProducer.send(msg)里的msg的值:

{"businessType":1,"cityId":10,"ctime":1567426767077,"dataKey":20190902,"logType":1,"phone":"13212341234","uid":12345678,"userType":1,"uuid":"32EA02C86D78863"}

无论消息长短,都可以看作一个json串,用 key-value的形式传递信息。

伪代码:接收一条消息

public class DemoConsumer {
 
    /**
    * 注意:服务端对单ip创建相同主题相同队列的消费者实例数有限制,超过100个拒绝创建.
    * */
    private static IConsumerProcessor consumer;
 
    public static void main(String[] args) throws Exception {
        Properties properties = new Properties();
            properties.setProperty(ConsumerConstants.SubscribeGroup, "dache.risk.log.queue.v2");
 
        // 创建topic对应的consumer对象(注意每次build调用会产生一个新的实例)
        consumer = KafkaClient.buildConsumerFactory(properties, "topic.xxx.xxx");
 
        // 调用recvMessageWithParallel设置listener
        consumer.recvMessageWithParallel(String.class, new IMessageListener() {
            @Override
            public ConsumeStatus recvMessage(Message message, MessagetContext context) {
                //TODO:业务侧的消费逻辑代码
                try {
                    System.out.println("message=[" + message.getBody() + "]  partition=" + message.getParttion());
                } catch (Exception e) {
                    e.printStackTrace();
                }
              
                return ConsumeStatus.CONSUME_SUCCESS;
            }
        });
       
    }
}

附录:消息管理工具

如果你们刚刚搭建起Kafka集群,还没有完备的页面管理系统,你不妨了解一下这几款开源工具,给领导展示一下解决问题的能力。

为了简化开发者和服务工程师维护 Kafka 集群的工作,基于页面的管理工具必不可少。

常用 Kafka 开源管理工具:

Kafka Manager :由 yahoo 团队开发。

Kafka的使用与特性怎么理解

感谢各位的阅读,以上就是“Kafka的使用与特性怎么理解”的内容了,经过本文的学习后,相信大家对Kafka的使用与特性怎么理解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/119050.html

(0)

相关推荐

  • 如何进行IMX6ULL开发板Linux_WIFI驱动实验

    技术如何进行IMX6ULL开发板Linux_WIFI驱动实验这期内容当中小编将会给大家带来有关如何进行IMX6ULL开发板Linux_WIFI驱动实验,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可

    攻略 2021年10月22日
  • css和html怎么连接(css怎么和html连接起来)

    技术css3中怎么连接class本篇内容主要讲解“css3中怎么连接class”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css3中怎么连接class”吧!

    攻略 2021年12月23日
  • 抖音粉丝怎么涨,抖音如何涨粉?

    技术抖音粉丝怎么涨,抖音如何涨粉?不得不说,在抖音上一切皆有可能,甚至很多人莫名其妙就火了,自己也是猝不及防。随着越来越多的网红的出现,许多人都纷纷加入抖音行列,希望一夜爆红,但是又往往事与愿违,有没有好一点的涨粉套路,

    测评 2021年10月20日
  • 如何利用Eclipse编辑中文资源文件

    技术如何利用Eclipse编辑中文资源文件这篇文章主要为大家展示了“如何利用Eclipse编辑中文资源文件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何利用Eclipse

    攻略 2021年11月28日
  • 手机掉水里马上捞起来会进水吗,苹果七掉进水里会进水么

    技术手机掉水里马上捞起来会进水吗,苹果七掉进水里会进水么一旦iphone进水手机掉水里马上捞起来会进水吗,按以下步骤处理:1、以最快速度把iphone从水里把它捞出来。2、立即关掉iPhone。马上断开电源。因为手机的损

    2021年10月21日
  • DIV+CSS网页内容显示不完整诊断是这样的

    技术DIV+CSS网页内容显示不完整诊断是这样的DIV+CSS网页内容显示不完整诊断是这样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。本文和大家重点

    攻略 2021年11月11日