kafka
Kafka是用scala语言编写
1.Kafka的特性
- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition,consumer group 对 partition 进行consume操作。
- 可扩展性:kafka集群支持热扩展
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
- 高并发:支持数千个客户端同时读写
- 顺序性:由生产者发送到一个特定的主题分区的消息将被以他们被发送的顺序来追加。也就是说,
如果一个消息M1和消息M2都来自同一个生产者,M1先发,那么M1将有一个低于M2的偏移,会更早在日志中出现。
消费者看到的记录排序就是记录被存储在日志中的顺序。
2.Kafka的使用场景:
- 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如Hadoop、Hbase、Solr等。
- 消息系统:解耦生产者和消费者、缓存消息等。
- 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
- 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
- 流式处理:比如 Spark Streaming 和 Storm。
- 事件源
docker 部署单机版kafka
1.下载Kafka和Zookeeper镜像文件
docker pull wurstmeister/kafka
docker pull wurstmeister/zookeeper
2.先运行zk,再运行kafka
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
docker run --name kafka01 \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=172.11.0.4:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.11.0.4:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-d wurstmeister/kafka
3.进入容器
docker exec -it kafka01 bash
cd /opt/kafka_2.13-2.7.0/bin/
4.运行kafka生产者发送消息
./kafka-console-producer.sh --broker-list localhost:9092 --topic sun
发送消息:
{"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","value":"80"}],"ver":"1.0"}
运行kafka消费者接收消息:
/opt/kafka_2.13-2.7.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sun --from-beginning
5.查看kafka启动日志:
docker logs kafka01