Kafka 生产者和消费者高级用法

Kafka 生产者和消费者高级用法

1 生产者的事务支持

Kafka 从版本0.11开始引入了事务支持,使得生产者可以实现原子操作,确保消息的可靠性。

java 复制代码
// 示例代码:使用 Kafka 事务
producer.initTransactions();
try {
   
   
    producer.beginTransaction();
    producer.send(new ProducerRecord<>("my-topic", "key", "value"));
    producer.send(new ProducerRecord<>("my-other-topic", "key", "value"));
    producer.commitTransaction();
} catch (ProducerFencedException | OutOfOrderSequenceException | AuthorizationException e) {
   
   
    producer.close();
} catch (KafkaException e) {
   
   
    producer.close();
    throw e;
}

2 消费者的多线程处理

在高吞吐量的场景下,多线程消费消息是提高效率的重要手段。消费者可以通过多线程同时处理多个分区的消息。

java 复制代码
// 示例代码:多线程消费者
properties.put("max.poll.records", 500);
properties.put("max.poll.interval.ms", 300000);

Consumer<String, String> consumer = new KafkaConsumer<>(properties);

// 订阅主题 "my-topic"
consumer.subscribe(Collections.singletonList("my-topic"));

// 多线程消费消息
int numberOfThreads = 5;
ExecutorService executor = Executors.newFixedThreadPool(numberOfThreads);
while (true) {
   
   
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
   
   
        executor.submit(() -> processRecord(record));
    }
}

// 关闭消费者
consumer.close();
executor.shutdown();

3 自定义序列化和反序列化

Kafka 默认提供了一些基本的序列化和反序列化器,但你也可以根据需求自定义实现。这在处理复杂数据结构时非常有用。

java 复制代码
// 示例代码:自定义序列化器
public class CustomSerializer implements Serializer<MyObject> {
   
   
    @Override
    public byte[] serialize(String topic, MyObject data) {
   
   
        // 实现自定义序列化逻辑
    }
}
相关推荐
用户1494484813203 小时前
为什么大厂很少直接用 2PC/TCC?聊聊分布式事务在真实业务里的落地套路
分布式·后端
code_slave(码畜)5 小时前
微服务架构落地:分库分表实战(下) —— 分布式主键、跨分片查询与分页聚合防坑
数据库·spring boot·分布式·spring cloud·微服务·架构·分库分表
德迅云安全-上官5 小时前
新一代智能分布式云接入:应用加速守护 TCP 业务安全与体验
分布式·tcp/ip·安全
凯凯姜5 小时前
分布式定时任务重复执行与故障恢复
分布式
ClouGence6 小时前
还在用命令行管理 Kafka?开源 CloudDM 让操作更简单
数据库·kafka·开源
Sayai7 小时前
Kafka 磁盘空间治理实战:retention 保留策略、log.dirs 在线扩容、分区跨盘迁移与不停机整体换盘
大数据·运维·分布式·kafka·消息队列
爱吃牛肉的大老虎8 小时前
Redis之分布式 Session问题
数据库·redis·分布式
阿标在干嘛8 小时前
分布式锁的“场景适配“:我们为什么在部分链路中选择了数据库乐观锁?
数据库·分布式
孤狼GPT8 小时前
ChatGPT、Codex排查实录:Kafka消费者日志明明显示处理成功,为什么同一条消息还是被重复消费?
kafka·springboot·codex·chatgptplus·chatgptpro
磐链科技9 小时前
Web3区块链开发需要哪些核心技术?解析分布式网络、数字钱包与跨链交互方案
分布式·web3·区块链