Kafka学习笔记(一):介绍和简单部署
Why Apache Kafka
- 由Linkedln创建,现在作为开源项目主要由Confluent、IBM、Cloudera维护
- 分布式、具有弹性体系结构,并且具有容错能力
- 水平可扩展性
- 可扩展到几百个broker
- 可扩展到每秒百万条信息吞吐量
- 高性能(低于10ms的延迟)几乎实时
- 超过2000家公司使用kafka,财富排行100强中有80%的公司使用kafka:airbnb、NETFLIX、Linkedin、UBER、Walmart...
Apache Kafka: 使用场景
- 信息系统
- 活动跟踪系统
- 从不同位置收集指标数据
- 收集应用程序日志
- 流处理(以Kafka Streams API为例)
- 解耦系统依赖和微服务
- 集成Spark、Flink、Storm、Hadoop等大数据技术
- 微服务pub/sub
案例
- Netflix使用Apache Kafka在你看电视节目的时候实时应用推荐
- Uber使用kafka实时收集用户打车和出行数据,并计算和预测需求,还实时计算你的定价
- LinkedIn使用kafka来防止垃圾邮件,收集用户交互,以便实时提供更好的连接建议
本地伪分布式环境搭建
1. 下载及安装
kafka_2.11-1.0.0.tar 2.11
表示scala的版本
解压:tar -xzvf kafka_2.11-1.0.0.tar
2. 配置
cp config/server.properties etc/server-0.properties
cp config/server.properties etc/server-1.properties
cp config/server.properties etc/server-2.properties
vi操作更改配置文件
broker.id=0 #修改broker id
#listeners=PLAINTEXT://:9092 #取消注释
log.dirs=/tmp/kafka-logs-0 #区分log
listeners:指定broker启动时本机的监听名称、端口,给服务器端使用
默认名称(协议) | |
---|---|
PLAINTEXT://:9092 | PLAINTEXT |
PLAINTEXT://192.168.1.10:9092 | SSL |
PLAINTEXT://hostname:9092 | SASL_PLAINTEXT |
PLAINTEXT://0.0.0.0:9092 | SASL_SSL |
advertised.listeners:对外发布的访问IP和端口,注册到zookeeper中,给客户端(client)使用
如果 advertised.listeners 没有配置,默认采用 listeners 的配置
外部网络需要访问时,advertised.listeners 需要配置成公网IP
## 实践
listeners=INTERNAL://:9092,EXTERNAL://0.0.0.0:9093
advertised.listeners=INTERNAL://kafka-0:9092,EXTERNAL://公网IP:9093
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
inter.broker.listener.name=INTERNAL
3. 启动
启动zookeeper
./bin/zookeeper-server-start.sh ./etc/zookeeper.properties
不同terminal窗口启动kafka实例
./bin/kafka-server-start.sh ./etc/server-0.properties
主题创建
./bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic topic_name --partitions 3 --replication-factor 2
查看主题
> ./bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic topic_name
Topic: topic_name Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: topic_name Partition: 1 Leader: 2 Replicas: 2,0 Isr: 2,0
Topic: topic_name Partition: 2 Leader: 0 Replicas: 0,1 Isr: 0,1
Replicas: 1,2
表示有2个副本,在broker id: 1和broker id: 2维护,Isr
表示同步正常的
创建消费者
0.10版本之后,消费者的偏移量保存在kafka主题,不再在zookeeper上保存
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic topic_name
从头消费可以加--from-beginning
创建Producer
./bin/kafka-consle-producer.sh --broker-list localhost:9092,localhost:9093,localhost:9094 --topic topic_name