网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
// 订阅主题
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
System.out.printf(“offset = %d, key = %s, value = %s%n”, record.offset(), record.key(), record.value());
// 处理消息
}
}
##### 3、使用 Kafka Streams 进行实时数据处理
Kafka Streams 是一个客户端库,用于构建实时应用程序和微服务,其中输入和输出数据都存储在 Kafka 中。你可以使用 Kafka Streams 来处理数据流。
StreamsBuilder builder = new StreamsBuilder();
KStream<String, String> textLines = builder.stream(“my-input-topic”);
KTable<String, Long> wordCounts = textLines
.flatMapValues(textLine -> Arrays.asList(textLine.toLowerCase().split(“\W+”)))
.groupBy((key, word) -> word)
.count(Materialized.as(“counts-store”));
wordCounts.toStream().to(“my-output-topic”, Produced.with(Serdes.String(), Serdes.Long()));
KafkaStreams streams = new KafkaStreams(builder.build(), props);
streams.start();
##### 4、优化 Kafka 生产者和消费者的配置
通过调整 Kafka 生产者和消费者的配置,如 `batch.size`, `linger.ms`, `buffer.memory` 等,可以显著提高 Kafka 的性能。
// 生产者配置优化
props.put(“linger.ms”, 10);
props.put(“batch.size”, 16384);
props.put(“buffer.memory”, 33554432);
// 消费者配置优化
props.put(“fetch.min.bytes”, 1024);
props.put(“fetch.max.wait.ms”, 100);
##### 5、使用压缩技术减少网络传输量
Kafka 支持多种压缩技术,如 GZIP、Snappy、LZ4、ZSTD,可以在生产者端进行配置,以减少数据在网络中的传输量。
props.put(“compression.type”, “snappy”);
##### 6、利用 Kafka Connect 集成外部系统
Kafka Connect 是用于将 Kafka 与外部系统(如数据库、键值存储、搜索引擎等)连接的框架,可以实现数据的实时导入和导出。
// 以连接到MySQL数据库为例
// 实际上需要配置Connect的配置文件
{
“name”: “my-connector”,
“config”: {
“connector.class”: “io.confluent.connect.jdbc.JdbcSinkConnector”,
“tasks.max”: “1”,
“topics”: “my-topic”,
“connection.url”: “jdbc:mysql://localhost:3306/mydb”,
“key.converter”: “org.apache.kafka.connect.json.JsonConverter”,
“value.converter”: “org.apache.kafka.connect.json.JsonConverter”,
}
}
##### 7、监控 Kafka 性能指标
监控 Kafka 集群的性能指标对于维护系统的健康状态至关重要。可以使用 JMX 工具或 Kafka 自带的命令行工具来监控。
// 使用JMX监控Kafka性能指标的示例代码
//具体实现需要根据监控工具的API进行
##### 8、实现高可用的 Kafka 集群
确保 Kafka 集群的高可用性,需要合理规划 Zookeeper 集群和 Kafka broker 的部署,以及配置恰当的副本数量。
// 在Kafka配置文件中设置副本因子
broker.id=0
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=2
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
zookeeper.connection.timeout.ms=6000
##### 9、使用 Kafka 的事务功能保证消息的一致性
Kafka 0.11 版本引入了事务功能,可以在生产者和消费者之间保证消息的一致性。
props.put(“transactional.id”, “my-transactional-id”);
Producer<String, String> producer = new KafkaProducer<>(props);
producer.initTransactions();
try {
producer.beginTransaction();
for(int i = 0; i < 100; i++) {
producer.send(new ProducerRecord<>(“my-topic”, Integer.toString(i), “value-” + i));
}
producer.commitTransaction();
} catch (ProducerFencedException | OutOfOrderSequenceException | AuthorizationException e) {
producer.abortTransaction();
} catch (KafkaException e) {
// 处理异常
}
##### 10、深入理解 Kafka 的内部工作原理
![img](https://img-blog.csdnimg.cn/img_convert/95691276dc7246e0e75c2ac7277aaa84.png)
![img](https://img-blog.csdnimg.cn/img_convert/c458cad84afd7d60e72742fbcc596d74.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**