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生产者
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