点击上方蓝字关注我们 文末有惊喜
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目
安装kafka的前提是你要安装zookeeper
# 创建文件夹
mkdir -p ~/docker/zookeeper/conf
mkdir -p ~/docker/zookeeper/data
mkdir -p ~/docker/zookeeper/datalog
docker run -d --name zookeeper \
--restart always \ # docker服务启动时, 默认启动zookeeper容器
-p 2181:2181 -p 2888:2888 -p 3888:3888 \
-v ~/docker/zookeeper/conf:/conf \
-v ~/docker/zookeeper/data:/data \
-v ~/docker/zookeeper/datalog:/datalog \
zookeeper:3.4.14
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -v ~/docker/kafka/logs:/kafka -e KAFKA_ZOOKEEPER_CONNECT=zookeeper --link zookeeper:zookeeper -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://${IP}:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
# 开启生产者
docker exec -it kafka bash
# 创建主题
kafka-topics.sh --create -zookeeper zookeeper --topic lezai --partitions 3 -replication-factor 1
# 生产者连接kafka
kafka-console-producer.sh --topic lezai -bootstrap-server 127.0.0.1:9092
# 开启消费者
docker exec -it kafka bash
# 消费者连接kafka
kafka-console-consumer.sh --topic lezai -bootstrap-server 127.0.0.1:9092 --from-beginning
# 现在在生产者窗口输入内容,看看消费者窗口是否能收到
1.查看topic的详细信息
./kafka-topics.sh -bootstrap-server 127.0.0.1:2181 -describe -topic testKJ1
2、为topic增加副本
./kafka-reassign-partitions.sh -zookeeper 127.0.0.1:2181 -reassignment-json-file json/partitions-to-move.json -execute
3、创建topic
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testKJ1
4、为topic增加partition
./bin/kafka-topics.sh –zookeeper 127.0.0.1:2181 –alter –partitions 20 –topic testKJ1
5、kafka生产者客户端命令
./kafka-console-producer.sh --broker-list localhost:9092 --topic testKJ1
6、kafka消费者客户端命令
./kafka-console-consumer.sh -zookeeper localhost:2181 --from-beginning --topic testKJ1
7、kafka服务启动
./kafka-server-start.sh -daemon ../config/server.properties
8、下线broker
./kafka-run-class.sh kafka.admin.ShutdownBroker --zookeeper 127.0.0.1:2181 --broker #brokerId# --num.retries 3 --retry.interval.ms 60
shutdown broker
9、删除topic
./kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic testKJ1 --zookeeper 127.0.0.1:2181
./kafka-topics.sh --zookeeper localhost:2181 --delete --topic testKJ1
10、查看consumer组内消费的offset
./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper localhost:2181 --group test --topic testKJ1
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
server:
port: 8080
spring:
kafka:
bootstrap-servers: 127.0.0.1:9092
producer: # 生产者
retries: 3 # 设置大于0的值,则客户端会将发送失败的记录重新发送
batch-size: 16384
buffer-memory: 33554432
# 指定消息key和消息体的编解码方式
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
group-id: mygroup
enable-auto-commit: true
@Autowired
private KafkaTemplate<String,String> kafkaTemplate;
@Test
public void send(){
kafkaTemplate.send("lezai",0,"key","kafkasss 发送数据");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@KafkaListener(topics = "lezai",groupId = "testGroup")
public void listen(ConsumerRecord<String, String> record) {
String value = record.value();
System.out.println("testGroup"+value);
System.out.println(record);
}
@KafkaListener(topics = "lezai",groupId = "testGroup2")
public void listen2(ConsumerRecord<String, String> record) {
String value = record.value();
System.out.println("testGroup2"+value);
System.out.println(record);
}
// 可以切换为相同的groupId,来验证消息是否会被同一个消费组中的消费者消费
扫码关注我们,了解最新内容
成长心路 | 优质书单 | 面试资料
牛人故事 | 前沿技术 | 视频教程