分布式-MQ-06 kafka基本使用

kafaka生产者消费者demo(简易上手demo) kafaka生产者消费者demo(简易上手demo) 文章目录kafaka生产者消费者demo(简易上手demo)导包kafka官方clientspring官方templatespring官方springcloud stream starterkafka官方client使用生产者Demo消费者Demo简易的多线程生产者生产消费使用线程池优化生产者ProducerThreadPool测试使用测试结果spring官方template使用配置生产者Demo消费者Demospring官方springcloud st 阅读详情

一、kafak架构中相关术语

在RabbitMQ-01章节中,讲述了消息队列的基础知识,包括优劣势、常见产品、应用场景等。

最近在生产中又使用到了aws的队列产品Simple Queue Sservice。从其特性看:超高吞吐量(支持批量消息Max10条/次,20s自动长轮询等待)、局部有序性的标准队列;FIFO队列等特性都和kafka的功能极其相似(暴论:猜测sqs也是kafka的衍生产品)。并且支持文件存储到S3桶、分布式消息队列全球拉取的能力,确实值得国内大厂们学习对标。
在这里插入图片描述
kafka的高吞吐量、消息生产消费的高可用性、分布式系统的稳定性,是很多衍生产品争相学习的热点。其相关术语则是大家语言环境中的基础,今天再把相关概念翻出来念念。

1.1 kafka所遵守JMS规范

JMS(Java Message Service)指Java平台中关于消息中间件的API规范。用于多应用进程或分布式系统间发送消息,异步通信。JMS规范模型如下:
在这里插入图片描述
JMS规范中有2种消息传播模式:

  • Point-to-Point点对点队列模式
    类似上文中提到的亚马逊的sqs即是点对点模式,通过轮询到某个既定的队列地址拉取消息,实现消费。
    在这里插入图片描述
  • pub/sub发布订阅模式
    kafka最广泛的使用场景,监听Broker中的某个topic,由服务器像所有消费者组推送新消息。
    在这里插入图片描述
1.2 相关术语
术语名称解释
Producer、Consumer消息生产者,向Broker发送消息的客户端;消息消费者,从Broker读取消息的客户端。
Topic主题。kafka根据topic对消息进行归类
Brokerkafka服务的实例(节点),一个或多个Broker组成kafka cluster
Group.id消费者分组。每个ConsumerGroup(Group.id)中只有1个Consumer可以唯一的消费某条消息
Partition物理分区,一个Topic可以分成多个partition,每个partition内的消息是局部有序的
Replicas副本数,一般追求集群高可用时,会设置不少于2的副本数,当Leader宕机时,选择其他broker收发消息
Leaderkafka集群中,partition一般都会有副本(Replicas),在各Broker间会由kafka推举出Leader用来收发消息
Followers多副本中,Followers将从Leader拉取消息,当Leader所在Broker宕机时,将从Follower中重选Leader
AR、IsrAssigned Repllicas(所有的副本,包括宕机的副本);In-Sync Replicas(与Leader保持一定同步的副本)
Offset偏移量,在partition中的消息是顺序写入的,当需要快速定位某条消息时,需要为其加上索引序号Offset
HWHeighWaterMark高水位,当所有副本中的活跃实例ISR中消费记录的偏移量达到统一,follower追上Leader时,HW值更新为最新offset值,并使最新记录对所有消费者可见。
LEOLog-end-offset,每个分区节点中日志偏移量末尾值。
1.3 术语详解及使用
  • Producer、Consumer
    生产消费模式大家熟知,在高并发章节中也时常提起,为了提高服务的吞吐能力,好像大家思路一致,三两步思路便都考虑到解藕。kafka服务端和线程池的BlockingQueue队列设计思路相似,都是有生产者将消息或Task推送到队列或kafka的服务器,再由消费者从队列中拉取消息,消费消息。进而实现了服务端解藕,提高并发能力。
    在这里插入图片描述
  • Topic
    典型订阅/发布模式中主题信息,当用户订阅了某个频道或大V的产品,则当该频道发送消息时,所有fans将接收到该消息。
  • Broker
    每个kafka实例都是一个Broker,受限于单机句柄数、IO瓶颈,会将多个Broker实例组成集群,提高并发能力。
    在这里插入图片描述
  • group.id
    ConsumerGroup消费者组需要为该组指定唯一的标识,即group.id。Producer在将消息发送都partition时,只会将消息写入partition中的某一个,这样当消费者消费消息时,同样group组内也只有唯一的consumer可以消费该消息。
    验证过程:新建topic:test_msg_partition,副本数为3,分区为2。向该topic发送消息:
    [root@worker1 kafka_2.11-2.4.1]# bin/kafka-topics.sh --create --zookeeper 192.168.149.128:2181 --replication-factor 3 --partitions 2 --topic test_mes_partition
    [root@worker1 kafka_2.11-2.4.1]# bin/kafka-console-producer.sh --broker-list 192.168.149.128:9092 --topic test_mes_partition
    >how many partition will receive this message?
    

在这里插入图片描述
从管理台检查,当所有副本都来到ISR后(数据同步完毕),检查哪个分区有消息:发现只有分区1数据写入
在这里插入图片描述

  • Partition

    kafka集群在启动时会在多个broker中选择一个controller,由controller负责对分区的leader进行选举,每个分区选择1个broker作为当前分区的leader,分区的其他副本作为follower。

    • controller选举机制:
      逐台Broker启动,谁先启动谁是controller,脚本批量启动,谁先注册到zk(create broker),谁是controller。
    • leader选举机制:
      一般只有ISR结合中的副本才有资格在现有Leader宕机时被选举为信Leader(默认会选择ISR列表中第一个broker作为leader,又问:为啥选第一个broker?被放入ISR列表的顺序靠前,同步副本的水位也应相对较高)
      但也能控制 unclean.leader.election.enable=true时,当ISR列表为空时,也可以在非ISR列表中而存在于AR中的broker选择leader
      在这里插入图片描述
  • Leader、Followers
    default.replication.factor=1自动创建topic时默认副本数量,当副本数设置为1时,当前broker实例即是Leader,所有消息的发送和读取都发生在当前Broker。但为了提高集群可用性,考虑到该Broker实例挂了呢?一般建议将副本数设置为集群中broker个数。
    那什么又是Leader、Followers呢?

    • Leader:收发消息的broker,实际应用中主要工作者。
    • Follower:复制Leader的消息,当Leader挂了时,伺机顶上。
  • Replicas
    副本数,名为副本数,实际指集群中所有broker的数量。

  • Isr
    In-Sync Replicas,同步副本。所有副本中与Leader中offset偏移量同步值保持一致的副本。

  • offset偏移量
    日志文件中的偏移量,相当于数组所在下标索引。

  • 动态看生产过程中上述术语的含义
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、相关API

  <dependencies>
    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka-clients</artifactId>
      <version>2.4.1</version>
    </dependency>
  </dependencies>
2.1 生产者API
public class ProducerDemo {
    private final static String TOPIC_NAME = "my‐local‐topic";

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        Properties props = new Properties();
        //broker服务端主机列表(kafka去zk化的标志,在历史版本中,此处客户端直接连接zk的端口)
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.149.128:9092,192.168.149.129:9092,192.168.149.130:9092");
        /*
        发出消息持久化机制参数,acks默认值为1
        1、acks=0:producer不会等待Broker确认结果即认为消息发送成功;性能最高,但是最容易丢消息.
        2、acks=1:producer等待leader将数据写入本地的log日志,不等待follower写入即可认为服务端写入数据成功.
            这种情况下,如果follower没有成功备份数据,而此时leader又挂掉,则消息会丢失.
        3、acks=‐1或all:producer需要等待 最少同步副本数 min.insync.replicas(默认为1,推荐配置大于等于2) 这个参数配置的副本个数都成功写入日志,才认为服务端写入成功.
            这种策略会保证,只要有一个备份存活就不会丢失数据.
         */
        props.put(ProducerConfig.ACKS_CONFIG, "1");
         /*
        发送失败会重试的次数,重试能保证消息发送的可靠性,但是也可能造成消息重复发送,比如网络抖动,所以需要在
        接收者那边做好消息接收的幂等性处理
        */
        props.put(ProducerConfig.RETRIES_CONFIG, 3);
        //默认重试间隔100ms,重试间隔设置300ms
        props.put(ProducerConfig.RETRY_BACKOFF_MS_CONFIG, 300);

        //设置发送消息的本地缓冲区,如果设置了该缓冲区,消息会先发送到本地缓冲区,可以提高消息发送性能,默认值是33554432,即32MB
        props.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432);
        /*
        kafka本地线程会从缓冲区取数据,批量发送到broker,
        设置批量发送消息的大小,默认值是16384,即16kb,就是说一个batch满了16kb就发送出去
        */
        props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);
        /*
        定义1个时间周期,本地缓冲区batch消息即使不满16ks,满足这个时间间隔也要发送到服务端
        默认值是0,意思就是消息必须立即被发送,但这样会影响性能
        */
        props.put(ProducerConfig.LINGER_MS_CONFIG, 10);

        //把发送的key从字符串序列化为字节数组
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        //把发送消息value从字符串序列化为字节数组
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

        Producer<String, String> producer = new KafkaProducer<String, String>(props);

        int msgNum = 5;
        final CountDownLatch countDownLatch = new CountDownLatch(msgNum);
        for (int i = 1; i <= msgNum; i++) {
            //指定发送分区
           /* ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>(TOPIC_NAME
                    , 0, "order"+i, "value"+i);*/
            //未指定发送分区,具体发送的分区计算公式:hash(key)%partitionNum
            ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>(TOPIC_NAME
                    , /*key*/"order"+i, "value"+i);

            //等待消息发送成功的同步阻塞方法(当acks为1或-1时生效)
            RecordMetadata metadata = producer.send(producerRecord).get();
            System.out.println("同步方式发送消息结果:" + "topic-" + metadata.topic() + "|partition-"
                    + metadata.partition() + "|offset-" + metadata.offset());

            //异步回调方式发送消息
            producer.send(producerRecord, new Callback() {
                public void onCompletion(RecordMetadata metadata, Exception exception) {
                    if (exception != null) {
                        System.err.println("发送消息失败:" + exception.getStackTrace());

                    }
                    if (metadata != null) {
                        System.out.println("异步方式发送消息结果:" + "topic-" + metadata.topic() + "|partition-"
                                + metadata.partition() + "|offset-" + metadata.offset());
                    }
                    countDownLatch.countDown();
                }
            });
        }
        countDownLatch.await(5, TimeUnit.SECONDS);
        producer.close();
    }
}
2.2 消费者API
public class ConsumerDemo {
    private final static String TOPIC_NAME = "my-local-topic";
    private final static String CONSUMER_GROUP_NAME = "groupLocal0";

    public static void main(String[] args) {
        Properties props = new Properties();
        // 指定broker服务器端口
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.149.128:9092,192.168.149.129:9092,192.168.149.130:9092");
        // 消费者所在组 group.id
        props.put(ConsumerConfig.GROUP_ID_CONFIG, CONSUMER_GROUP_NAME);
        // 是否自动提交offset,默认就是true
        props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");
        // 自动提交offset的间隔时间
        props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
        //props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");

        /*
        当消费主题的是一个新的消费组,或者指定offset的消费方式,offset不存在,那么应该如何消费
        latest(默认) :只消费自己启动之后发送到主题的消息
        earliest:第一次从头开始消费,以后按照消费offset记录继续消费,这个需要区别于consumer.seekToBeginning(每次都从头开始消费)
        */
        props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");

        /*
         consumer 控制心跳
         consumer给broker发送心跳的间隔时间,broker接收到心跳如果此时有rebalance发生会通过心跳响应将
         rebalance方案下发给consumer,这个时间可以稍微短一点
         */
        props.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 1000);

        /*
        服务端管理心跳
        服务端broker多久感知不到一个consumer心跳就认为他故障了,会将其踢出消费组,
        对应的Partition也会被重新分配给其他consumer,默认是10秒
        */
        props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 10 * 1000);

        //一次poll最大拉取消息的条数,如果消费者处理速度很快,可以设置大点,如果处理速度一般,可以设置小点
        props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 500);

        /*
        如果两次poll操作间隔超过了这个时间,broker就会认为这个consumer处理能力太弱,
        会将其踢出消费组,将分区分配给别的consumer消费
        */
        props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, 30 * 1000);
        //序列化与反序列化的代理类
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());

        KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);

        consumer.subscribe(Arrays.asList(TOPIC_NAME));
        // 消费指定分区
        //consumer.assign(Arrays.asList(new TopicPartition(TOPIC_NAME, 0)));

        //消息回溯消费
        /*consumer.assign(Arrays.asList(new TopicPartition(TOPIC_NAME, 0)));
        consumer.seekToBeginning(Arrays.asList(new TopicPartition(TOPIC_NAME, 0)));*/

        //指定offset消费
        /*consumer.assign(Arrays.asList(new TopicPartition(TOPIC_NAME, 0)));
        consumer.seek(new TopicPartition(TOPIC_NAME, 0), 10);*/

        //从指定时间点开始消费
        /*List<PartitionInfo> topicPartitions = consumer.partitionsFor(TOPIC_NAME);
        //从1小时前开始消费
        long fetchDataTime = new Date().getTime() - 1000 * 60 * 60;
        Map<TopicPartition, Long> map = new HashMap<>();
        for (PartitionInfo par : topicPartitions) {
            map.put(new TopicPartition(topicName, par.partition()), fetchDataTime);
        }
        Map<TopicPartition, OffsetAndTimestamp> parMap = consumer.offsetsForTimes(map);
        for (Map.Entry<TopicPartition, OffsetAndTimestamp> entry : parMap.entrySet()) {
            TopicPartition key = entry.getKey();
            OffsetAndTimestamp value = entry.getValue();
            if (key == null || value == null) continue;
            Long offset = value.offset();
            System.out.println("partition-" + key.partition() + "|offset-" + offset);
            System.out.println();
            //根据消费里的timestamp确定offset
            if (value != null) {
                consumer.assign(Arrays.asList(key));
                consumer.seek(key, offset);
            }
        }*/

        while (true) {
            /*
             * poll() API 是拉取消息的长轮询
             */
            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf("收到消息:partition = %d,offset = %d, key = %s, value = %s%n", record.partition(),
                        record.offset(), record.key(), record.value());
            }

            /*if (records.count() > 0) {
                // 手动同步提交offset,当前线程会阻塞直到offset提交成功
                // 一般使用同步提交,因为提交之后一般也没有什么逻辑代码了
                consumer.commitSync();

                // 手动异步提交offset,当前线程提交offset不会阻塞,可以继续处理后面的程序逻辑
                consumer.commitAsync(new OffsetCommitCallback() {
                    @Override
                    public void onComplete(Map<TopicPartition, OffsetAndMetadata> offsets, Exception exception) {
                        if (exception != null) {
                            System.err.println("Commit failed for " + offsets);
                            System.err.println("Commit failed exception: " + exception.getStackTrace());
                        }
                    }
                });

            }*/
        }
    }
}
Kafka使用规范(纯技术和实战建议) 1、kafka使用规范主要从,生产、可靠性、和消费为轴线定义使用规范,另外Kafka建议核心业务系统不要使用(对数据可靠性要求高),因为Kafka高效性能源于批量设计思想,要充分利于Kafka高效性能,前提是要允许部分数据丢失。 2、kafka使用核心:削峰、解耦、向下游并行广播通知(无可靠性保证)和分布式事务,本规范仅从削峰、解耦、向下游并行广播通知论述。 阅读详情

相关推荐

kafka入门:简介、使用场景、设计原理、主要配置及集群搭建

Kafkaisadistributed,partitioned,replicatedcommitlogservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。一个Topic可以认为是一类消息,每个topic将被分成多个partiti

Kafka消费者手动提交详解及demo

在上一篇 Kafka基础及java客户端使用Kafka使用Java实现数据的生产和消费demo 中介绍如何简单的使用kafka进行数据传输。本篇则重点介绍kafka中的 consumer 消费者的讲解。 应用场景 在上一篇kafka的consumer消费者,我们使用的是自动提交offset下标。 但是offset下标自动提交其实在很多场景都不适用,因为自动提交是在kafka拉取到数据之后就直接提...

feiqinbushizheng的博客 9583

利用正射影像对斜射图像进行反向投影

因此,RANSAC算法可以通过计算inliners和outliers的数量来评估估计关键点的质量,确保与其他点不一致的点不会在Homography矩阵中被估计。然后,它通过考虑关键点周围区域中图像的梯度大小和方向来计算每个提取的关键点的方向。由于单应性矩阵的计算可能会受到两个图像中异常值的存在的影响,这将导致矩阵的不正确估计并导致沿图像的对准和映射不良。FLANN匹配器的方法基于K近邻搜索的概念,即从图像中找到k个近邻。找到相机在正射影像坐标系中的位置并在正射影像上绘制重叠区域的边界框。

gis收藏家的博客 1513

Kafka史上最详细原理总结

Kafka Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Li

我是Alvin家鸡鸭鱼的小米米 6万+

INCA软件操作指南:手把手教你生成和解析DCM标定数据文件

本文详细介绍了INCA软件在汽车ECU开发中生成和解析DCM标定数据文件的全流程。从A2L文件导入到DCM文件生成,再到HEX文件导出,手把手教你掌握标定数据处理的实用技巧,包括参数标定、曲线标定和常见问题排查,帮助工程师提升工作效率。

weixin_29271053的博客 1057

用户视角下的vfsglobal预约困境:从注册到登录的全流程避坑指南

本文详细解析了vfsglobal签证预约系统从注册到登录的全流程操作,帮助用户避开常见技术陷阱。针对IP限制、DNS解析、浏览器缓存等登录障碍提供实用解决方案,并揭示账号管理的隐藏规则与支付环节的延时处理技巧,助力用户高效完成签证预约。

ol78901234的博客 871

kafka使用标准个人总结

【推荐】高吞吐量规定:在需要处理海量数据且要求高吞吐量时,选择使用Kafka。原因:得益于其分布式架构、批量传输以及节点间负载均衡,Kafka能够处理更高的并发量和数据流量。【推荐】大数据处理和日志收集规定:对于需要进行实时数据分析和挖掘的大数据处理和日志收集,推荐使用Kafka。原因:Kafka提供了强大的数据处理和存储能力,能够实现数据的实时收集、处理和分发。【推荐】消息持久化规定:当需要长期保留和随时查询历史消息时,应选择Kafka进行消息持久化。

少说,多做。 4885

AIDC智算中心建设:资源池化核心技术解析

AI 应用的POD在运行的时候,通过池化运行时访问虚拟GPU、执行AI任务,池化运行时拦截对虚拟GPU的访问请求、转递给池化服务代理执行,池化服务代理通过向智算池化控制器查询虚拟GPU所对应的真实智算资源位置、规格,按查询结果分配智算资源、执行AI任务,如果真实的智算资源位于远程计算节点,则由本地池化服务代理将访问请求转递给远程计算节点上的池化服务代理处理,相关通信经由参数面网络。

u013891230的博客 2431

性能测试之中间件:什么是 kafka 和 MQ ?

kafka的诞生,是为了解决linkedin的数据管道问题,起初linkedin采用了ActiveMQ来进行数据交换,大约是在2010年前后,那时的ActiveMQ还远远无法满足linkedin对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,linkedin决定研发自己的消息传递系统,当时linkedin的首席架构师jay kreps便开始组织团队进行消息传递系统的研发。例如,在电商平台中,Kafka可以实时处理用户的行为数据,帮助企业做出及时的商业决策。

朱雀随云记的博客 1759

【QT/C++】事件过滤器之基于重写 eventFilter 方法的多种常见应用场景及实现

Qt事件过滤器通过重写eventFilter方法实现多种实用功能:1)鼠标事件处理(点击全选文本、禁用滚轮、悬停提示);2)键盘事件处理(输入内容限制、快捷键提交);3)焦点事件处理(自动弹出下拉框、实时验证);4)绘图事件处理(自定义控件绘制);5)窗口事件处理(防止意外关闭、尺寸限制)。事件过滤器提供非侵入式的事件处理方案,相比传统子类化方式更灵活,通过installEventFilter安装到目标控件即可实现各种交互增强功能。

yuhuasheng1997的博客 1484

【OpenClaw从入门到精通】第01篇:保姆级教程——从零开始搭建你的第一个本地AI助理(2026实测版)

本文聚焦2026年开源AI代理工具OpenClaw的本地部署与实操,从核心概念拆解入手,先厘清OpenClaw、Gateway、Skills、ClawHub的关联,再明确硬件系统要求与大模型API-Key准备要点,通过官方一键安装脚本完成本地部署,并配置阿里云百炼API实现大模型对接。以“让AI助理抓取开源中国热门项目”的虚拟实战案例,详细演示Skills调用流程,同时梳理部署中“命令找不到”“API-Key配置失败”等高频问题的解决方法。内容兼顾新手友好性与实操参考性,所有步骤均基于公开技术文档验证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 4万+

第1章 MQ 的基本概念

第一节 什么是MQMQ(message queue),本质是个队列, FIFO 先入先出,只不过队列中存放的内容是message而已。是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中, MQ 是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务。第二节 为什么要用MQ。

正版踏雪无痕的博客 1021

Sqlserver2012评估期已过问题解决(启动数据库服务报错1705都是同样的问题,数据库过期未激活)

一、背景: 因为之前安装sqlserver2012忘记输入序列号,如今出现评估期已过的问题,前几天忙活半天,才解决,发现网 上叙述都非常凌乱,并且仅仅有大意,有的非常难操作。所以把我操作的过程和大家交流分享: 一定要有序列号的输入。不然会有很多其它的麻烦出现: 二、问题解决: 第一步:进入SQL2012配置工具中的安装中心。 第二步:再进入左側维护选项界面,然后选择选择版本号升级。 ...

堂前燕的博客 3267

性能测试之中间件:一篇文章告诉你什么是 kafka 和 MQ!

在做项目的性能测试时,MQ和Kafka经常会是项目服务架构中非常重要的组成部分,负责处理大量的实时数据流,如日志收集、消息队列、事件流处理等,Kafka和MQ的性能会直接影响整个系统的表现。所以,我们做性能测试的时候经常也需要关注一下MQ中间件的性能。

测试界的彭于晏的博客 614

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

性能测试之中间件:一篇文章告诉你什么是 kafka 和 MQ

在做项目的性能测试时,MQ和Kafka经常会是项目服务架构中非常重要的组成部分,负责处理大量的实时数据流,如日志收集、消息队列、事件流处理等,Kafka和MQ的性能会直接影响整个系统的表现。所以,我们做性能测试的时候经常也需要关注一下MQ中间件的性能。

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 847

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

分布式实时消息队列Kafka(一)Kafka的介绍

目标:了解消息队列的功能,应用场景及特点路径step1:消息队列是什么?step2:什么情况下需要使用消息队列?step3:消息队列的优缺点是什么?实施定义官方定义:消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。简单点说:消息队列MQ用于实现两个系统之间或者两个模块之间传递消息数据时,实现数据缓存功能基于队列的方式,实现数据缓存应用场景。

Maynor的博客 1055

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

06kafka及异步通知文章上下架

消息中间件对比特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高(主从)高(主从)非常高(分布式)非常高(分布式)功能特性成熟的产品、较全的文档、各种协议支持好并发能力强、性能好、延迟低MQ功能比较完善,扩展性佳只支持主要的MQ功能,主要应用于大数据领域消息中间件对比-选择建议消息中间件建议Kafka。

qq_56947957的博客 948

06 APACHE KAFKA基础

目录 APACHE KAFKA基础 PT1 KAFKA介绍 Pt1.1 Kafka发展史 Pt1.2 Kafka应用场景 (1) 消息通信 (2) 大数据领域 (3) 流计算领域 PT2 KAFKA安装 Pt2.1 CentOS安装单机版Kafka (1) 环境准备 (2) 安装JDK环境 (3) 安装ZooKeeper (4) 安装Kafka (5) 验证 Pt2.2 Kafka命令 Pt2.3 Kafka管理控台 APACHE KAFKA基础 PT1 KAFKA介

Java是世界上最好的语言 1323

【性能测试】一篇文章告诉你什么是 Kafka 和 MQ!

在现代软件架构中,消息中间件(MQ)是连接不同组件的重要桥梁。本文将重点介绍两种流行的中间件——Apache Kafka和传统的消息队列(MQ),并探讨它们在性能测试中的作用。

测试界的彭于晏的博客 599

黑马头条--day06文章上下架--kafka消息队列

特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高(主从)高(主从)非常高(分布式)非常高(分布式)功能特性成熟的产品、较全的文档、各种协议支持好并发能力强、性能好、延迟低MQ功能比较完善,扩展性佳只支持主要的MQ功能,主要应用于大数据领域消息中间件对比-选择建议消息中间件建议Kafka。

可爱的鸡仔的博客 1495

MQ(Message Queue)学习:Kafka基础概念(转载)

转载:java3y 本blog仅用于学习和记录,方便日后查阅 一、什么是Kafka? 首先我们得去官网看看是怎么介绍Kafka的: https://kafka.apache.org/intro 在收集资料学习的时候,已经发现有不少的前辈对官网的介绍进行翻译和总结了,所以我这里就不重复了,贴下地址大家自行去学习啦: https://scala.cool/2018/03/learning-kafka-1/ https://colobu.com/2014/08/06/kafka-quickstart/

冷雨清的博客 234

06-kafka及异步通知文章上下架

消息中间件对比特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高(主从)高(主从)非常高(分布式)非常高(分布式)功能特性成熟的产品、较全的文档、各种协议支持好并发能力强、性能好、延迟低MQ功能比较完善,扩展性佳只支持主要的MQ功能,主要应用于大数据领域消息中间件对比-选择建议消息中间件建议Kafka。

shall_zhao的博客 1070

MQ消息队列篇:三大MQ产品的必备面试种子题

MQ(Message Queue)是一种重要的技术,用于实现应用程序之间的异步通信,提高系统的可扩展性和可靠性。了解不同MQ产品的特点和适用场景,根据实际需求进行产品选型。为了保证消息的可靠传递,可以采用持久化机制,确保消息不会丢失。幂等性是保证消息消费的重要概念,可以通过唯一标识和消息状态进行判断。保证消息的顺序可以采用单一消费者或者分区有序的方式。高效读写可以通过批量发送和接收消息、消息压缩等方式进行优化。

努力的小雨,一个阳光向上的博客不仅仅给你知识更希望带给你快乐 1109

黑马头条Day06-Kafka及异步通知文章上下架

特性ActiveMQRabbitMQRocketMQKafka公司/社区ApacheRabbit阿里Apache开发语言JavaErlangJavaScala&Java协议支持自定义协议自定义协议可用性一般(主从)高(主从)非常高(分布式)非常高(分布式)单机吞吐量差(万级)一般(万级)高(10万级)非常高(100万级)消息延迟毫秒级微秒级毫秒级毫秒以内消息可靠性一般高高一般功能特性成熟的产品、较全的文档、各种协议支持最好。

ltt159264的博客 1154

06-kafka及异步通知文章上下架-黑马头条

06-kafka及异步通知文章上下架-黑马头条

lisus2007的专栏 1097
上一篇: 分布式-MQ-05 kafka单机、集群、管理台搭建
下一篇: 分布式-MQ-07 kafka高级特性及常见问题调优
旧梦昂志
博客等级 码龄7年 3724粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧梦昂志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值