java 订阅 kafka_Kafka 分布式发布-订阅消息系统

本文介绍了如何使用Java订阅和发布Kafka消息。首先,通过bin/kafka-console-producer.sh和bin/kafka-console-consumer.sh命令模拟发送和接收消息。接着展示了Kafka的容错能力,即使leader节点宕机,消息仍可消费。然后,详细讲解了Java客户端开发,包括在pom.xml中添加依赖,创建KafkaProducer实例,并设置配置参数,如设置应答机制和自定义分区策略。最后,展示了一个简单的ProducerApi示例,用于发送消息到Kafka主题。
摘要由CSDN通过智能技术生成

4-模拟客户端去发送消息

bin/kafka-console-producer.sh --broker-list hadoop:9092,hadoop001:9092 --topic test

5-模拟客户端去接受消息

bin/kafka-console-consumer.sh --bootstrap-server hadoop:9092 --from-beginning --topic hellotopic

6-测试一下容错能力.

Kill -9 pid[leader 节点]

另外一个节点被选做了 leader,node 1 不再出现在 in-sync 副本列表中: bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test Topic:test PartitionCount:1 ReplicationFactor:3 Configs:

Topic: test Partition: 0 Leader: 2 Replicas: 1,2,0 Isr: 2,0

虽然最初负责续写消息的 leader down 掉了,但之前的消息还是可以消费的:

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic test

3. Kafka客户端开发

3.1. Java Client

3.1.1. 添加pom.xml依赖

org.apache.kafka

kafka_2.11

0.10.2.1

org.apache.kafka

kafka-clients

0.10.2.1

3.1.2. Producer生产者

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importorg.apache.kafka.clients.producer.KafkaProducer;importorg.apache.kafka.clients.producer.ProducerRecord;importorg.apache.kafka.common.serialization.StringSerializer;importjava.util.Properties;/*** kafka 生产端Api开发*/

public classProducerApi {public static void main(String[] args) throwsException{

Properties props= newProperties();

props.setProperty("bootstrap.servers","hadoop:9092,hadoop001:9092,hadoop002:9092");

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

props.setProperty("value.serializer","org.apache.kafka.common.serialization.StringSerializer");/*** 发送数据的时候是否需要应答

* 取值范围:

* [all,-1,0,1]

* 0:leader不做任何应答

* 1:leader会给producer做出应答

* all、-1:fllower->leader->producer

* 默认值: 1*/

//props.setProperty("acks","1")

/*** 自定义分区

* 默认值:org.apache.kafaka.clients.producer.internals.DefaultPartitoner*/

//props.setProperty("partitioner.class","org.apache.kafaka.clients.producer.internals.DefaultPartitoner");//创建一个生产者的客户端实例

KafkaProducer kafkaproducer = new KafkaProducer<>(props);int count=0;while (count<1000){int partitionNum=count%3;//封装一条消息

ProducerRecord record = new ProducerRecord("testTopic", partitionNum, "", count+"");//发送一条消息

kafkaproducer.send(record);

count++;

Thread.sleep(1*1000);

}//释放

kafkaproducer.close();

}

}

View Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值