Kafka在处理大数据量的场景非常优秀,下面介绍下它的优势有哪些:
1. 高吞吐量:Kafka能够处理大规模的消息流并实现高吞吐量的数据处理。它的设计目标之一就是支持每秒百万级的消息处理能力。
2. 可扩展性:Kafka支持横向扩展,可以轻松地通过增加更多的机器来扩展集群的处理能力。它可以平滑地扩展到大型的消息流处理系统。
3. 持久性:Kafka将消息持久化在磁盘上,确保消息不会丢失。它提供了可配置的保留策略,可以根据需求保存消息的时间长度或者大小。
4. 可靠性:Kafka采用分布式复制机制,将消息副本分布在多个节点上,确保消息的可靠传输。当一个节点发生故障时,仍然可以继续处理消息,而不会导致数据丢失。
5. 高可用性:Kafka采用多副本机制,保证了高可用性。当一个节点发生故障时,其他副本可以接管工作,保证系统的可用性。
6. 灵活性:Kafka不仅可以用作消息队列,还可以用作事件发布/订阅系统、日志收集系统等。它提供了丰富的API和工具,可以满足不同场景的需求。
优势介绍完毕,那么正题开始!以下内容为Java中实现生产者的创建和发送消息,希望大家上车后自信认真学习!
发车!
一、引入依赖
引入的依赖版本要与我们服务器中的Kafka版本一致
二、生产者发送消息基本实现
1、生产者端的同步发送消息
同步机制:
如果生产者发送消息后没有收到ACK,生产者会阻塞,阻塞3秒钟时间,如果还没有收到消息,会进行重试,重试次数为3次
实现代码:
控制台:
再次发送消息:
发现只有偏移量发生了变化,因为发送消息,消息未被消费,偏移量增加;而分区不变,是因为我们上面发送消息的key指定的是"mykey"没变,所以会根据规则hash(consumerGroupId)%_consumer_offsets计算分区数
指定分区的同步发送:
代码和上面的代码几乎相同,只是创建消息的时候调用ProducerRecord的重载方法,指定发送消息的分区
2、生产者端异步发送消息
异步机制:
异步发送,生产者发送完消息就可以执行后面的业务逻辑,不会等待消息发送完这段时间阻塞Broker在收到消息后会异步调用生产者提供的callBack回调方法
代码实现:
控制台:
正常情况下,控制台是不会打印"异步方式发送消息结果:......",因为执行完这个异步发送消息的方法时,主线程就会关闭,会由新的线程去异步执行发消息的方法,所以主线程是那不到这个打印的结果。所以需要在这个方法的后面让主线程休眠,才可以拿到打印结果
至此,关于Kafka在Java中配置生产者已经介绍完毕,后续还会持续更新,敬请期待~~~