kafka java消费_Kafka 使用Java实现数据的生产和消费demo

本文围绕Kafka的Java生产与消费展开。介绍了Kafka生产者的各种配置,如bootstrap.servers、acks等,并给出配置代码和生产数据代码。还重点阐述了Kafka消费者的配置,包括group.id、enable.auto.commit等,为使用Kafka进行数据生产和消费提供了详细指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

org.apache.kafka

kafka_2.12

1.0.0

provided

org.apache.kafka

kafka-clients

1.0.0

org.apache.kafka

kafka-streams

1.0.0

Kafka Producer

在开发生产的时候,先简单的介绍下kafka各种配置说明:

bootstrap.servers: kafka的地址。

acks:消息的确认机制,默认值是0。

acks=0:如果设置为0,生产者不会等待kafka的响应。

acks=1:这个配置意味着kafka会把这条消息写到本地日志文件中,但是不会等待集群中其他机器的成功响应。

acks=all:这个配置意味着leader会等待所有的follower同步完成。这个确保消息不会丢失,除非kafka集群中所有机器挂掉。这是最强的可用性保证。

retries:配置为大于0的值的话,客户端会在消息发送失败时重新发送。

batch.size:当多条消息需要发送到同一个分区时,生产者会尝试合并网络请求。这会提高client和生产者的效率。

key.serializer: 键序列化,默认org.apache.kafka.common.serialization.StringDeserializer。

value.deserializer:值序列化,默认org.apache.kafka.common.serialization.StringDeserializer。

还有更多配置,可以去查看官方文档,这里就不在说明了。

那么我们kafka 的producer配置如下:

Properties props = newProperties();

props.put("bootstrap.servers", "master:9092,slave1:9092,slave2:9092");

props.put("acks", "all");

props.put("retries", 0);

props.put("batch.size", 16384);

props.put("key.serializer", StringSerializer.class.getName());

props.put("value.serializer", StringSerializer.class.getName());

KafkaProducer producer = new KafkaProducer(props);

kafka的配置添加之后,我们便开始生产数据,生产数据代码只需如下就行:

producer.send(new ProducerRecord(topic,key,value));

topic: 消息队列的名称,可以先行在kafka服务中进行创建。如果kafka中并未创建该topic,那么便会自动创建!

key:键值,也就是value对应的值,和Map类似。

value:要发送的数据,数据格式为String类型的。

在写好生产者程序之后,那我们先来生产吧!

我这里发送的消息为:

String messageStr="你好,这是第"+messageNo+"条数据";

并且只发送1000条就退出,结果如下:

196034825f65381cfdd34e4340ddf6c9.png

59f93b99017053a7a3b146a370800cc6.png

可以看到信息成功的打印了。

如果不想用程序进行验证程序是否发送成功,以及消息发送的准确性,可以在kafka服务器上使用命令查看。

Kafka Consumer

kafka消费这块应该来说是重点,毕竟大部分的时候,我们主要使用的是将数据进行消费。

kafka消费的配置如下:

bootstrap.servers: kafka的地址。

group.id:组名 不同组名可以重复消费。例如你先使用了组名A消费了kafka的1000条数据,但是你还想再次进行消费这1000条数据,并且不想重新去产生,那么这里你只需要更改组名就可以重复消费了。

enable.auto.commit:是否自动提交,默认为true。

auto.commit.interval.ms: 从poll(拉)的回话处理时长。

session.timeout.ms:超时时间。

max.poll.records:一次最大拉取的条数。

auto.offset.reset:消费规则,默认earliest 。

earliest: 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费 。

latest: 当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据 。

none: topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常。

key.serializer: 键序列化,默认org.apache.kafka.common.serialization.StringDeserializer。

value.deserializer:值序列化,默认org.apache.kafka.common.serialization.StringDeserializer。

那么我们kafka 的consumer配置如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值