kafka概述

Kafka Introduce 如果生产者错误地将消息发送到了一个非leader副本,或者消息在网络传输过程中被路由到了一个非leader副本,那么这个非leader副本需要识别出这一情况,并将消息转发给正确的leader副本。需要注意的是,Kafka的生产者客户端通常会配置为直接与目标分区的leader副本通信,以避免不必要的消息转发和延迟。在Kafka的broker集群中,如果一条消息到达了一个broker节点,但该节点并不是目标分区的leader节点,那么这条消息需要被转发到相应的leader节点进行处理。 阅读详情

初识kafka

kafka是由LinkedIn公司采用Scala语言开发的一个多分区,多副本且基于Zookeeper协调的分布式消息系统,现在被捐献给Apache基金。目前kafka的一个定位是分布式流式处理平台,具有⾼吞吐、可持久化、可⽔平扩展、⽀持流数据处理等多种特性
kafka之所以受到越来越多的青睐,与它扮演的三个角色有关:

  • 消息系统: Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。与此同时,Kafka 还提供了⼤多数消息系统难以实 现的消息顺序性保障及回溯消费的功能。
  • 存储系统: Kafka 把消息持久化到磁盘,相⽐于其他基于内存存储的系统⽽⾔,有效地降低了数据丢失的风险。也正是得益于 Kafka 的消息持久化功能和多副本机制,我们可以把 Kafka 作为长期的 数据存储系统来使⽤,只需要把对应的数据保留策略设置为“永久”或启⽤主题的⽇志压缩功能即可。
  • 流式处理平台: Kafka 不仅为每个流⾏的流式处理框架提供了可靠的数据来源,还提供了⼀个完整的流式处理类库,⽐如窗口、连接、变换和聚合等各类操作。

基本概念

一个典型的kafka体系架构包括若干Producer,若干Consumer,以及一个Zookeeper集群,如下图所示。其中Zookeeper是kafka用来负责对元数据的管理、控制器的选举等操作的。Producer将消息发送到broker,Broker负责将接收到的消息存储到磁盘中,而Consumer负责Broker订阅并消费信息。

  • 消息:kafka中每条数据或者说记录称为消息,消息由字节数组组成。
  • 批次:批次就是一组消息,这些消息属于同一个主题和分区。
  • producer:生产者,也被称为发布者或者写入者,一般情况下,一条消息会被发布到一个特定的主题上。生产者默认会将消息均衡的发布到同一主题不同分区上,也可以指定分区。
  • topic:主题,kafka的消息是通过主题划分的,主题就好比是数据库中的表的概念。主题可以划分成多个分区,因此无法保证整个主题消费的顺序性。
  • 分区(partition):一个主题可以有多个分区,一个分区就是一个提交日志,消息以追加的方式写入,然后以先入先出的顺序进行消费,每个分区只能被同一消费组中的某一个消费者进行消费(也就是所有权关系),但是能够同时被多个消费组同时消费。
  • Consumer:消费者,也被称为订阅者或读者,能够订阅一个或者多个主题,并按照消息生成的顺序进行消费,消费者通过偏移量来确定是否消费过数据。
  • 消费者群组:消费者只是消费群组的一部分,也就是说一个群组中,可以有一个或者多个消费者共同消费同一个主题,而消费者群组能保证在每个分区只能被一个消费者使用。
  • broker:一个独立的kafka服务器称为broker,broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。同时,broker为消费者服务,对读取分区的请求作出相应,返回生产者生产的数据。
  • 集群:由多个broker组成的组。会从broker中选出一个集群控制器的角色。

console客户端使用

在安装目录下,可以使用命令行:

./kafka-console-producer.sh --broker-list 127.0.0.1:9091,127.0.0.1:9092,127.0.0.1:9093 --topic test

来创建一个topic,并进入生产消息输入客户端
再重新新开一个命令终端,执行:

sh kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094 --topic test --from-beginning

来创建一个消费者,在生产者输入消息,就可以被该消费者消费

java客户端使用

生产者创建

//这里只创建一个最简单的生产者
Properties kafkaProperties = new Properties();
kafkaProperties.put("bootstrap.servers", "host1:9092,host2:9092,host3:9093");
kafkaProperties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
kafkaProperties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(kafkaProperties);

消息发送
发送消息一共分为三种模式

  • 发送即忘记
  • 同步发送
  • 异步发送
同步即忘记
/**
 * 发送消息并忘记,虽然会进行重试,但是还是会丢失数据而客户端并不知道
 */
@Test
public void sendMessageAndForget() {
    ProducerRecord<String, String> producerRecord = new ProducerRecord<>(TOPIC_TEST, "test_message", "this test message");
    kafkaProducer.send(producerRecord);
}
同步发送
/**
 * 同步发送消息,通过send方法获取到future,当发送失败后,get()方法会返回异常
 * @throws ExecutionException
 * @throws InterruptedException
 */
@Test
public void sendMessageWithSync() throws ExecutionException, InterruptedException {
    ProducerRecord<String, String> producerRecord = new ProducerRecord<>(TOPIC_TEST, "test_message", "this test message");
    Future<RecordMetadata> future = kafkaProducer.send(producerRecord);
    RecordMetadata recordMetadata = future.get();
    System.out.println("record offset:" + recordMetadata.offset());
}
异步发送
/**
 * 异步发送消息,通过在send方法中,增加一个回调函数,能够知道发送结果
 * @throws InterruptedException
 */
@Test
public void sendMessageWithAsync() throws InterruptedException {
    ProducerRecord<String, String> producerRecord = new ProducerRecord<>(TOPIC_TEST, "test_message", "this test message");
    kafkaProducer.send(producerRecord, new Callback() {
        @Override
        public void onCompletion(RecordMetadata metadata, Exception exception) {
            System.out.println(metadata.offset());
        }
    });
    TimeUnit.SECONDS.sleep(3);
}
消息组成
  • key:用于选择分区,当没有设置的时候,由kafka随机分配一个分区,随机策略是每隔topic.metadata.refresh.interval.ms设置的时间随机获取一个分区,这段时间内的消息都是发往这个分区。
  • value:消费端能接收到的内容

生产者配置

必选参数
  • bootstrap.servers:指定brokers地址,可以指定多个,当其中broker一个宕机,能够连接到这个集群中的其他节点。
  • key.serializer:键序列化类,该类必须实现org.apache.kafka.common.serialization.Serializer接口,kafka已经提供基本类型的序列化类
  • value.serializer:值序列化类,见key.serializer
可选参数
  • acks:指定需要多少个分区接收到消息,才认为消息发送成功,提供以下三个值:
    • 0:不用等待服务器响应,就默认为成功,会导致丢失消息,速度最快
    • 1:只需要集群领导者接收成功并响应就算是成功。此时吞吐量取决于是异步发送还是同步发送。
  • all:需要所有的节点接收成功并响应才算是成功,安全级别最高,吞吐量最低。
  • buffer.memory:生产者内存缓冲区的大小,生产者用该内存缓冲发送到服务器的消息。
  • compression.type:压缩类型,提供以下三个值:
    • snappy:Google发明的压缩算法,能够占用较少的CPU来达到不错的压缩比。
    • gzip:占用更多的CPU,更高的压缩比
    • lz4:侧重于效率,压缩速度很快。
  • retries:重试次数,生产者从服务器接收的错误如果是临时性的,该值将会决定重试的次数,每次重试之间会间隔100ms,该值也可以通过retry.backoff.ms来决定
  • batch.siz:一个批次可以使用的内存大小。当多个消息需要被发送到一个分区时,生产者会将消息放到批次中,等满了再一次性发送,减少网络开销。但并不是一定要等该缓存满了才会发送,只有部分满的批次也会发送。
  • linger.ms:指定生产者发送批次之前,会等待多长时间将发送的消息写入批次。
  • client.id:可以是任何字符,服务器用它来识别消息的来源
  • max.in.flight.requests.per.connection:指定生产者接收到服务器响应之前可以发送多少个消息(批次),它的值越高,占用越多的内存,响应的会提升吞吐量,将它设置成1可以保证发送的顺序性,即使发生了重试。
  • timeout.ms:指定broker等待同步副本返回消息的时间
  • request.timeout.ms:指定生产者发送数据等待服务器响应时间
  • metadata.max.age.ms:指定生产者获取元数据等待服务器的时间
  • max.block.ms:指定调用send()和partitionFor()阻塞方法时的等待时间。
  • max.request.size:指定生产者发送的请求的大小
  • receive.buffer.bytes:指定TCP socket接收数据包缓冲区的大小,如果设置成-1,则默认使用系统的默认值
  • send.buffer.bytes:指定TCP socket发送数据包缓冲区的大小,如果设置成-1,则默认使用系统的默认值

消费者创建

Properties kafkaProperties = new Properties();
kafkaProperties.put("bootstrap.servers", "host1:9092,host2:9092,host3:9092");
kafkaProperties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
kafkaProperties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
kafkaProperties.put("group.id", "group_test");
kafkaConsumer = new KafkaConsumer<>(kafkaProperties);

订阅主题

数组方式
kafkaConsumer.subscribe(Collections.singletonList("test"));
通配符方式
kafkaConsumer.subscribe("test.*");

消费者配置

必填参数
  • bootstrap.servers:同生产者
  • key.deserializer:键反序列化类,该类必须实现org.apache.kafka.common.serialization.Deserializer接口,kafka已经提供基本类型的序列化类
  • value.deserializer:值反序列化类,见key.deserializer
  • group.id:消费组id

可选参数

  • fetch.min.bytes:指定服务器获取记录的最小字节数,当没有达到这个字节数时,则等待达到最小数再消费返回
  • fetch.max.wait.ms:指定等待服务器没有达到最小数时,等到多久返回给消费者。
  • max.partition.fetch.bytes:指定从每个分区返回给消费者最大字节数
  • session.timeout.ms:该属性指定消费者在被认定死亡之前可以和服务器断开的时间,如果超过该时间没有发送心跳,则认定消费者死亡,会触发再平衡过程,将分配给该消费者的分区分配给同一消费组中其他的消费者。
  • heartbeat.interval.ms:指定心跳间隔
  • auto.offset.reset:指定消费者读取一个没有偏移量或者偏移量失效(消费者长时间失效,包含的偏移量已经失效),可以指定以下两个值:
    • latest:默认值,当偏移量无效的情况下,从最新的记录开始消费,即消费者启动之后生产的数据
    • earliest:当偏移量无效的情况下,从最起始的位置开始读取分区的记录
  • enable.auto.commit:指定消费者提交偏移量的方式,可以设置为以下两个值
    • true:默认值,消费者自动提交偏移量
    • false:消费者显式提交偏移量
  • partition.assignment.strategy:指定分区分配给消费者的策略,可以设置为以下两个值:
    • Range:class org.apache.kafka.clients.consumer.RangeAssignor
    • RoundRobin:org.apache.kafka.clients.consumer.RoundRobinAssignor
    • Sticky:org.apache.kafka.clients.consumer.StickyAssignor
  • client.id:客户端ID
  • max.poll.records:指定单次调用call()方法能够最多返回记录的数量
  • receive.buffer.bytes:指定TCP socket接收数据包缓冲区的大小,如果设置成-1,则默认使用系统的默认值
  • send.buffer.bytes:指定TCP socket发送数据包缓冲区的大小,如果设置成-1,则默认使用系统的默认值

偏移量

kafka和其他消息中间件的一个独特之处就是kafka消费的消息不需要确认,而是通过偏移量来维护消费消息的开始位置。
更新分区的偏移量我们称为提交

提交

kafka会有一个特殊的主题:_consumer_offset,消费者会往这个主题中发送包含每个分区的偏移量的消息。如果一个消费者一直处于可用状态,这个偏移量就没有什么用处,但是当消费者发生重启或者新的消费者进入触发再均衡,则会从该主题中读取每个分区的最后一次提交的偏移量。

提交方式
自动提交
  • 当enable.auto.commit设置为true时,则每隔auto.commit.interval.ms时间提交偏移量,带来的问题是当还有提交就消费者宕机引起再均衡,这一段时间内的消息可能会被重复消费
  • 同步提交
    当enable.auto.commit设置为false时,通过commitSync()方法进行提交,该方法会一直阻塞,直到提交成功或者抛出异常,影响效率
  • 异步提交
    当enable.auto.commit设置为true时,通过commitAsync()方法进行提交,该方法会异步提交且不会重试,效率较高
更好的提交方式

同步和异步进行组合

@Test
public void consumerMessage() {
    try {
        while (true) {
            ConsumerRecords<String, String> consumerRecords = kafkaConsumer.poll(Duration.ofSeconds(10));
            consumerRecords.forEach(consumerRecord -> {
                System.out.println(consumerRecord.value());
            });
            //异步提交偏移量
            kafkaConsumer.commitAsync();
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //同步提交偏移量
        kafkaConsumer.commitSync();
        kafkaConsumer.close();
    }
}
提交特定的偏移量

commitSync()和commitAsync()提交的都是当前消费批次的最后一个偏移量,下面我们来示范如何提交特定的偏移量:

/**
 * 消费消息并提交特定的偏移量
 */
@Test
public void consumerAndCommitPositionOffset() {
    long counter = 0L;
    try {
        while (true) {
            ConsumerRecords<String, String> consumerRecords = kafkaConsumer.poll(Duration.ofSeconds(10));
            for (ConsumerRecord<String, String> consumerRecord : consumerRecords) {
                counter++;
                System.out.println();
                //每1000条数据提交一次偏移量,并指定偏移量
                if (counter % 1000 == 0) {
                    Map<TopicPartition, OffsetAndMetadata> concurrentOffsetMap = new HashMap<>();
                    concurrentOffsetMap.put(new TopicPartition(consumerRecord.topic(), consumerRecord.partition()),
                            new OffsetAndMetadata(consumerRecord.offset() + 1));
                    kafkaConsumer.commitSync(concurrentOffsetMap);
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //同步提交偏移量
        kafkaConsumer.commitSync();
        kafkaConsumer.close();
    }
}
再均衡监听

程序可以在订阅主题的手设置再平衡监听,该监听会在Consumer发生再均衡,分区重新分配时调用

kafkaConsumer.subscribe(Collections.singletonList(TOPIC_TEST), new ConsumerRebalanceListener() {
    /**
     * 该方法会在再均衡之前,消费者停止读取消息之后被调用
     * @param partitions
     */
    @Override
    public void onPartitionsRevoked(Collection<TopicPartition> partitions) {
        System.out.println("will rebalance ...");
    }

    /**
     * 该方法会在再均衡完成之后,消费者重新开始读取消息之前被调用
     * @param partitions
     */
    @Override
    public void onPartitionsAssigned(Collection<TopicPartition> partitions) {
        System.out.println("rebalance has done ...");
    }
});
Spring-Kafka系列(2)——SpringKafka生产者KafkaTemplate SpringBoot为Kafka提供了两种配置方式SpringBoot提供了配置类,且会将开头的配置项值注入的配置类中 在使用Kafka配置项时只需要将其注入即可 在spring的配置文件中配置如下: 2.2 SpringKafka生产者KafkaTemplate 2.2.1 创建一个生产者KafkaTemplate 创建流程:application.ymlKafkapropertiesProducerFactoryKafkaTemplate 2.2.2 KafkaTemplate发送消息方法 Kafka 阅读详情

相关推荐

Kafka(十):Kafka概述

第1章Kafka概述 1.2.2消息队列的两种模式 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。 消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。 本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。 ...

mingyuli的博客 359

kafka springBoot 配置

通过这样的配置,你的 Spring Boot 应用程序将启用 Kafka 支持,你可以使用 KafkaTemplate 进行消息发送,使用 @KafkaListener 进行消息消费。但是在这种模式下,如果处理消息时发生异常,Kafka 服务器会重新发送相同的消息,可能会导致消息的重复消费。当你在 Spring Boot 应用程序的配置类上添加 @EnableKafka 注解时,它会激活 Kafka 基础设施,使你能够在应用程序中使用 Kafka 相关的组件。这样可以确保消息的准确处理,避免重复消费。

weixin_41827053的博客 5524

Kafka工作原理简要概述

1、整体流程 流程图 词汇 topic:主题 producer:生产者 consumer:消费者 consumer-group:消费者组 offset:偏移量 follower:副本 要点概述 kafka是以topic进行分类的,由producer生产数据发送到topic,再被consumer进行消费,同时offset会记录每个分区的消费进度,就算中途挂掉了,下次也会从offset开始继续消费 每个topic可以有多个分区,每个分区可以配置1个或多个副本,形成leader-followe

qq_28834355的博客 1892

kafka的server.properties配置参数说明

kafka的server.properties配置参数说明broker.idlistenersadvertised.listenerslog.dirszookeeper.connect broker.id 在Kafka集群中,每个broker都有一个唯一的id值用来区分彼此。Kafka在启动时会在zookeeper中/brokers/ids路径下创建一个与当前broker的id为名称的虚节点,Kafka的健康状态检查就依赖于此节点。当broker下线时,该虚节点会自动删除,其他broker或者客户端通过判断

u013367040的博客 3988

10.2 在新能源、储能及电网节点的应用实践

构网型变流器技术在电力系统中的应用进展 构网型变流器技术正从理论研究走向规模化工程应用,为新能源并网提供主动支撑能力。该技术在光伏电站采用"部分构网"混合架构,由构网单元实现黑启动和弱网稳定;在风电场利用叶轮动能提供惯量响应。储能系统是理想的构网载体,可提供快速调频和动态电压支撑。在电网节点,构网型STATCOM可增强弱电网电压稳定性,大容量变流器可替代传统调相机。当前面临标准滞后、宽频振荡风险等共性挑战,需在可靠性、经济性间取得平衡。系统级协调控制和精确阻抗建模是应用成功的关键。

技术工作者 1112

【electron】- 从零到一:在electron-vite项目中集成better-sqlite3的工程化实践

本文详细介绍了在electron-vite项目中集成better-sqlite3数据库的完整工程化实践。针对原生模块的编译挑战,提供了从环境配置、路径规划、服务封装到IPC通信的解决方案,并重点解决了开发与生产环境的数据库路径分离及打包部署等核心问题,帮助开发者构建稳定高效的Electron桌面应用数据层。

weixin_29306571的博客 205

Kafka——配置文件详解

【代码】Kafka——配置文件详解。

吴声子夜歌的博客 6080

层层剥开Allegro skill--快速抓取并写入Allegro软件【呕血创作,转载注明】

Allegro skill eda pcb

qq_36492361的博客 1258

Kafka API 概述

Kafka API 概述。

码不停歇的博客 388

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 257

血管分割中的直径平衡难题:从clDice到cbDice的演进与实践

本文探讨了血管分割中的直径平衡难题,详细分析了从clDice到cbDice的技术演进与实践。通过引入半径感知权重和边界对齐惩罚,cbDice在保持拓扑完整性的同时提升了几何敏感度,显著改善了细小血管的分割效果。文章还分享了在nnU-Net中实现cbDice的工程细节,包括GPU加速骨架提取和多任务损失组合策略,为医学影像分析提供了重要参考。

weixin_29170327的博客 244

【Kafka一】概述

kafka

yzx3105的博客 918

duilib 之 事件--bubbled冒泡事件应用、通用点击事件、进入离开事件、XML样式中直接添加事件

1. box 绑定点击事件 ui::Box *pSmallVideoBox = (ui::Box*)FindControl(L"rightBox"); if (pSmallVideoBox) { auto SwitchVideo = [this](ui::EventArgs* param){ m_bSecScreenIsScale = m_bMainScre...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 973

Kafka概述

1 Kafka是什么 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。 1 Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。 2 Kafka最初是由LinkedIn公司开发,并于 2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供...

Da.的博客 373

PyCharm配置SSH和SFTP远程连接服务器

关于这篇博文,主要因为公司企业都是通过本地测试,同步到服务器进行跑动,舍友看着同事丝滑的操作,让我做个教程。本着钻研的精神,写下了这篇博客记录 关于pycharm这个软件,只有专业版才有远程连接的这个配置,社区版没有(同事一再强调要专业版,学生认证还可申请免费) 关于SSH和SFTP都是一种协议 具体知识点补充可看我这篇文章: 【计算机网络】常见面试题集锦(全) SSH:提供安全通道进行远程登录 SFTP协议可以远程文件传输获取等,数据的安全传输主要由SSH连接提供

码农研究僧的博客 5537

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Kafka-3.x-教程】-【一】Kafka 概述、Kafka 快速入门

Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。kafka的安装部署、kafka的基本命令。

weixin_53543905的博客 1661

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《Kafka》1-概述

在平常的开发工作中,大家或多或少的会用到消息中间件。可能是为了解除循环依赖,可能是为了削峰填谷。不管怎么样,消息中间件已经成为开发架构中不可缺少的重要组成部分。 消息中间件有很多选型,包括RabbitMq/RocketMq/ActiveMq/Kafka/。这个系列是主要总结一下胡希老师在极客时间的Kafka核心技术与实践课程。大家像购买的话可以扫描最下方的二维码。 Kafka是什么? Kafka是一个消息引擎,提供消息传递功能。 Kafka是一个实时流处理引擎,提供实时的流处理能力。 消息引擎 大

David_lou的专栏 325

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Kafka 概述介绍

Apache Kafka 是 Apache 软件基金会的开源的流处理平台,该平台提供了消息的发布与订阅的消息队列,一般用作系统间解耦、异步通信、削峰填谷等作用。同时 Kafka 又提供了 Kafka Streaming 插件包实现了实时在线流处理。相比较一些专业的流处理框架不通,Kafka Streaming 计算是运行在应用端,具有简单、入门要求低、部署方便等优点。 首先来看看它的异步: 在上图中的上半部分是非异步的方式,上图的下半部分是异步的方式。...

码农UP2U 261

Kafka 概述

Kafka 概述消息列队(MQ)为什么需要消息队列(MQ)使用消息队列的好处消息队列的两种模式kafka简介Kafka 定义Kafka 简介Kafka 的特性kafka系统架构 消息列队(MQ) 为什么需要消息队列(MQ) 主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection 错误,引发雪崩效应。 我们使用消息队列,通过异步处理请求,从而缓解系统的压力。消息队列常应用于异步处

weixin_55609829的博客 711

Kafka入门笔记(一) --kafka概述+kafka集群搭建

kafka概述+kafka 集群搭建

qq_34424698的博客 1430

kafka源码(1)-概述&项目结构

kafka源代码工程目录结构如下图:

shandadadada的博客 454
上一篇: Elasticsearch分片数量选择及如何保证数据一致性
下一篇: 线程(Thread)和线程池(ThreadPoolExecutor)
周庄
博客等级 码龄10年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值