当前位置:首页 > 科技  > 软件

使用Java与Apache Kafka构建可靠的消息系统

来源: 责编: 时间:2023-10-23 17:05:28 193观看
导读Apache Kafka 是一个分布式流处理平台,也是一种高性能、可扩展的消息系统。它在处理海量数据时表现出色,而且易于使用和部署。Apache Kafka 是一种分布式发布-订阅消息系统,由 LinkedIn 公司开发。它具有高性能、高并发

Apache Kafka 是一个分布式流处理平台,也是一种高性能、可扩展的消息系统。它在处理海量数据时表现出色,而且易于使用和部署。2Rz28资讯网——每日最新资讯28at.com

Apache Kafka 是一种分布式发布-订阅消息系统,由 LinkedIn 公司开发。它具有高性能、高并发、可扩展等特点,适合用于大型实时数据处理场景。Kafka 的核心概念包括:2Rz28资讯网——每日最新资讯28at.com

1、消息(Message):Kafka 中的基本数据单元,由一个键和一个值组成。2Rz28资讯网——每日最新资讯28at.com

2、生产者(Producer):向 Kafka 中写入消息的程序。2Rz28资讯网——每日最新资讯28at.com

3、消费者(Consumer):从 Kafka 中读取消息的程序。2Rz28资讯网——每日最新资讯28at.com

4、主题(Topic):消息的类别或者主要内容,每个主题可以划分为多个分区。2Rz28资讯网——每日最新资讯28at.com

5、分区(Partition):主题的一个子集,每个分区都有自己的偏移量。2Rz28资讯网——每日最新资讯28at.com

6、偏移量(Offset):表示消费者在某个主题中读取的位置。2Rz28资讯网——每日最新资讯28at.com

Kafka 生产者用于向 Kafka 集群发送消息。在使用 Kafka 生产者时,需要指定消息的主题和消息的键和值,然后将消息发送到 Kafka 集群中。下面是使用 Kafka 生产者发送消息的代码示例:2Rz28资讯网——每日最新资讯28at.com

Properties props = new Properties();props.put("bootstrap.servers", "localhost:9092");props.put("acks", "all");props.put("retries", 0);props.put("batch.size", 16384);props.put("linger.ms", 1);props.put("buffer.memory", 33554432);props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");Producer<String, String> producer = new KafkaProducer<>(props);String topic = "test";String key = "key1";String value = "Hello, Kafka!";ProducerRecord<String, String> record = new ProducerRecord<>(topic, key, value);try {    RecordMetadata metadata = producer.send(record).get();    System.out.printf("Sent record with key='%s' and value='%s' to partition=%d, offset=%d/n",        key, value, metadata.partition(), metadata.offset());} catch (Exception ex) {    ex.printStackTrace();} finally {    producer.close();}

在上述代码中,我们使用了 KafkaProducer 类创建了一个生产者实例,并指定了各种配置参数。其中,bootstrap.servers 参数用于指定 Kafka 集群的地址,key.serializer 和 value.serializer 则用于指定消息键和值的序列化方式。然后,我们将消息的主题、键和值包装成一个 ProducerRecord 对象,并使用 send() 方法发送到 Kafka 集群中。最后,我们使用 get() 方法获取发送消息的元数据,并输出发送结果。2Rz28资讯网——每日最新资讯28at.com

Kafka 消费者用于从 Kafka 集群中读取消息,并进行相应的处理。在使用 Kafka 消费者时,需要指定要消费的主题和在主题中的位置(也就是偏移量)。下面是使用 Kafka 消费者消费消息的代码示例:2Rz28资讯网——每日最新资讯28at.com

Properties props = new Properties();props.put("bootstrap.servers", "localhost:9092");props.put("group.id", "test-group");props.put("enable.auto.commit", "true");props.put("auto.commit.interval.ms", "1000");props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);String topic = "test";consumer.subscribe(Collections.singletonList(topic));while (true) {    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));    for (ConsumerRecord<String, String> record : records) {        System.out.printf("Received record with key='%s' and value='%s' from partition=%d, offset=%d/n",            record.key(), record.value(), record.partition(), record.offset());    }}//consumer.close();

在上述代码中,我们使用 KafkaConsumer 类创建了一个消费者实例,并指定了各种配置参数。其中,bootstrap.servers 和 group.id 参数与生产者类似,而 enable.auto.commit 和 auto.commit.interval.ms 则用于自动提交偏移量。然后,我们使用 subscribe() 方法订阅指定的主题并进入轮询状态,通过 poll() 方法获取最新的消息记录。最后,我们输出消息记录的键、值、所在的分区和偏移量。2Rz28资讯网——每日最新资讯28at.com

2Rz28资讯网——每日最新资讯28at.com

在实际生产环境中,Kafka 的可靠性非常重要。为了确保消息能够被有效地处理和传输,在 Kafka 中提供了多种可靠性保证机制。2Rz28资讯网——每日最新资讯28at.com

1、消息复制(Message Replication) Kafka 通过将每条消息复制到多个副本来保证消息的可靠性。当其中一个 broker 处理失败时,其他 broker 可以接替它的工作,确保消息仍然可以被正确地处理。2Rz28资讯网——每日最新资讯28at.com

2、优先副本选举(Preferred Replica Election) Kafka 通过选举一个或多个优先副本来增加集群的可靠性。这些优先副本可以优先处理请求,并在其他副本出现故障时接替它们的工作。2Rz28资讯网——每日最新资讯28at.com

3、ISR(In-Sync Replica)机制 Kafka 中的 ISR 机制用于确保所有的副本都保持同步。只有处于 ISR 中的 broker 才能够与生产者进行通信,也才能够被选为新的 leader,从而保证消息的可靠性和一致性。2Rz28资讯网——每日最新资讯28at.com

4、偏移量管理(Offset Management) Kafka 提供了不同的偏移量管理方式,包括自动提交偏移量、手动提交偏移量和定期提交偏移量。每种管理方式都有其特点和适用场景。2Rz28资讯网——每日最新资讯28at.com

Apache Kafka 是一种高性能、可扩展的消息系统,适用于大规模实时数据处理场景。在 Java 中,可以使用 Kafka 生产者和消费者 API 构建可靠的消息系统。同时,Kafka 还提供了多种可靠性保证机制,以确保消息能够被有效地处理和传输。2Rz28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14581-0.html使用Java与Apache Kafka构建可靠的消息系统

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Vite 的设计理念,本文就来详细看一下!

下一篇: 掌握这些套路,你也能顺利解决并发问题

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java的NIO库提供了内存映射文件的支持,它可以将文件映射到内存中,从而可以更快地读取和写入文件数据。本文将对Java内存映射文件进行详细的介绍和演示。内存映射文件概述内存
  • 从零到英雄:高并发与性能优化的神奇之旅

    从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 破圈是B站头上的紧箍咒

    破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 共享单车的故事讲到哪了?

    共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • 北京:科技教育体验基地开始登记

    北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top