Kafka是一种分布式的消息系统。本文基于0.9.0版本,利用自带的zookeeper,部署了3个broker节点的kafka集群。
下载、配置
下载
启动zookeeper
config/zookeeper.properties,配置可以改数据目录,端口可以不改
启动zk
启动kafka-broker
broker配置
配置可以改一下日志目录,端口冲突了可以改一下端口。
kafka-broker配置:config/server.properties
另外两个broker配置
config/server-1.properties
config/server-2.properties
nohup bin/kafka-server-start.sh config/server.properties >> broker1.log &
nohup bin/kafka-server-start.sh config/server-1.properties >> broker2.log &
nohup bin/kafka-server-start.sh config/server-2.properties >> broker3.log &
bin/kafka-topics.sh –create –zookeeper localhost:2181 –partitions 3 –topic test3partitions –replication-factor 1 #包含3个分区,1个副本
bin/kafka-topics.sh –list –zookeeper localhost:2181
bin/kafka-topics.sh –describe –zookeeper localhost:2181 –topic test3partitions
bin/kafka-topics.sh –delete –topic test3partitions –zookeeper localhost:2181
bin/kafka-console-producer.sh –broker-list localhost:9092,localhost:9093,localhost:9094 –topic test3partitions
zookeeper.connect=localhost:2181 #zookeeper,后面以host:port,host port,….
group.id=test-consumer-group #消费者group-id
bin/kafka-console-consumer.sh –zookeeper localhost:2181 –topic test3partitions
bin/kafka-console-consumer.sh –zookeeper localhost:2181 –consumer.config config/consumer.properties –topic test3partitions
bin/kafka-console-consumer.sh –zookeeper localhost:2181 –consumer.config config/consumer.properties –topic test3partitions
bin/kafka-console-consumer.sh –zookeeper localhost:2181 –consumer.config config/consumer.properties –topic test3partitions
public class NewProducerSimple {
public static void main(String [] args) {
Properties props = new Properties();
props.put(“bootstrap.servers”, “localhost:9092,localhost:9093,localhost:9094”);
props.put(“acks”, “all”);
props.put(“retries”, 0);
props.put(“batch.size”, 16384);
props.put(“linger.ms”, 1);
props.put(“buffer.memory”, 33554432);
props.put(“key.serializer”, “org.apache.kafka.common.serialization.StringSerializer”);
props.put(“value.serializer”, “org.apache.kafka.common.serialization.StringSerializer”);
props.put(“partitioner.class”,”com.youdao.newClient.SimplePartitioner”);
Producer
for(int i = 0; i < 20; i++)
producer.send(new ProducerRecord
producer.close();
}
}
public class SimplePartitioner implements Partitioner {
@Override
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
int partitionNum = 3;
String k = (String)key;
int partition = Math.abs(k.hashCode()) % partitionNum;
return partition;
}
@Override
public void close() {
}
@Override
public void configure(Map<String, ?> map) {
}
}
public class NewConsumerSimple {
public static void main(String [] args) {
Properties props = new Properties();
props.put(“bootstrap.servers”, “localhost:9092,localhost:9093,localhost:9094”);
props.put(“group.id”, “test”);
props.put(“enable.auto.commit”, “true”);
props.put(“auto.commit.interval.ms”, “1000”);
props.put(“key.deserializer”, “org.apache.kafka.common.serialization.StringDeserializer”);
props.put(“value.deserializer”, “org.apache.kafka.common.serialization.StringDeserializer”);
KafkaConsumer
consumer.subscribe(Arrays.asList(“test3partitions”));
while (true) {
ConsumerRecords
for (ConsumerRecord
System.out.printf(“offset = %d, key = %s, value = %s%n”, record.offset(), record.key(), record.value());
}
}
}
```