关于使用kafka的个人总结
来源:互联网 发布:监控设备域名 编辑:程序博客网 时间:2024/06/05 06:59
本篇文章算是对几个月工作的一个总结吧,接触了几个月的kafka和flume,感觉自己也只能算是了解kafka的阶段,接下来也打算深入研究下kafka的原理,下面写的算是对工作中使用到的kafka方面的东西做个总结吧!
kafka概述
(有空可以浏览一下http://orchome.com)
当前kafka版本为0.10.0.0。
关于Kafka需要了解的几个关键词:
①Producer
发布消息的对象(flume)
②Consumer
订阅发布的消息并处理消息的对象(spark)
③Broker
Producer把生产的消息“推”到Broker中,Consumer可以从Broker中订阅一个 或多个topic,并从Broker中“拉”消息进行消费
④Topic
Kafka中把消息分门别类,每一类消息是一个topic
⑤Partition
Kafka把每个Topic分成多个partition,每个partition中的消息是有序的,partition中的每条消息都会被分配一个有序的id(offset)
Topic & Partition
1.kafka把一个topic分为1个或以上的partition,每个partition在物理上对应一个文件夹,
文件夹中存储的是该partition的所有消息以及一个索引文件。(以第一个消息的offset命名)
2.每一个分区都是一个顺序的消息队列,并且可以持续的添加。分区中的每条消息都被分配了一个序列号,即偏移量(64字节的offset),在每个分区中的偏移量都是唯一的
3.在发送一条消息时,可以指定这条消息的key,producer根据这个key和partition机制来判断将这条消息发送到哪个parition(通过实现kafka.producer.Partitioner接口)。key相同的消息会被发送并存储到同一个partition里
4.每一条消息被发送到broker时,会根据分区的规则选择被存储到哪一个partition在创建topic时可以在config/server.properties中指定这个partition的数量
offset
1.消费者所持有的仅有的元数据就是这个偏移量,也就是消费者在这个log中的位置。 这个偏移量由消费者控制。
2.当消费者消费消息的时候,偏移量会线性的增加。实际偏移量由消费者控制,消费者可以将偏移量重置为之前的一个偏移量,重新读取消息。
具体使用:
开启kafka前先要开启zookeeper
1.bin/zkServer.sh start
2.开启kafka server
bin/kafka-server-start config/server.properties
3.测试时可以先开kafka的producer
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test(--broker-list是kafka所在主机)
再开启kafka的consumer
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
接着就可以在producer中发送消息
Kafka配置文件:
几个关键配置:
broker.id=0
listeners=PLAINTEXT://172.16.49.173:9092
port=9092
log.dirs=kafka-logs
zookeeper.connect=localhost:2181
listeners一定要配置成为IP地址;如果配置为localhost或服务器的hostname,在使用java发送数据时可能会抛出异常:org.apache.kafka.common.errors.TimeoutException: Batch Expired 。因为在没有配置advertised.host.name 的情况下,Kafka并没有广播我们配置的host.name,而是广播了主机配置的hostname。远端的客户端并没有配置 hosts,所以自然是连接不上这个hostname的,也可以在远端客户端配置hosts
Zookeeper.connect中zk集群地址以“,”分隔
集群的配置
与单机的配置差不多,只是listeners的配置需要改为集群服务的IP地址和采用的端口。
关于kafka的监控:
可以使用kafkaOffSetMonitor
(https://github.com/quantifind/KafkaOffsetMonitor/releases/download/v0.2.1/KafkaOffsetMonitor-assembly-0.2.1.jar)
将KafkaOffsetMonitor-assembly-0.2.0.jar上传到服务器后,可以新建一个脚本用于启动该应用。脚本内容如下:
java -cp KafkaOffsetMonitor-assembly-0.2.0.jar
com.quantifind.kafka.offsetapp.OffsetGetterWeb
--zk zk1:2181,zk2:2181,zk3:2181
--port 8088
--refresh 10.seconds
--retain 2.days
zk集群
Consumer消费情况
(左上角显示的是topic生产速率,右上角是consumer消费速率,蓝色的表示当前Topic中的Message数目,灰色的表示当前Consumer消费的offset位置,红色的表示蓝色灰色的差值,即当前Consumer滞后于Producer的message数目)
这里有一个坑,默认情况下Producer往一个不存在的Topic发送message时会自动创建这个Topic。由于在这个封装中,有同时传递message和topic的情况,如果调用方法时传入的参数反了,将会在Kafka集群中自动创建Topic。在正常情况下,应该是先把Topic根据需要创建好,然后Producer往该Topic发送Message,最好把Kafka这个默认自动创建Topic的功能关掉。
如果真的不小心创建了多余的Topic,在删除时,会出现“marked for deletion”提示,只是将该topic标记为删除,使用list命令仍然能看到。如果需要调整这两个功能的话,在server.properties中配置如下两个参数:
auto.create.topics.enable 默认值true
delete.topic.enable 默认值false
- 关于使用kafka的个人总结
- 关于使用kafka的个人总结
- Kafka 个人总结
- 个人Kafka使用
- 关于NRF24L01模块使用的部分个人总结
- 关于Jenkins使用的个人几点总结
- kafka个人总结(1)
- Kafka理论总结(个人)
- 关于INSTALL_FAILED_NO_MATCHING_ABIS.的个人总结
- Kafka的安装和使用总结
- 个人总结ASI的使用
- AsyncTask的个人使用总结
- CocoaPods 的个人使用总结
- PCA9555的使用个人总结
- kafka-使用总结
- 关于sql的一些个人总结
- 关于集合类的个人总结
- 关于虚函数表的个人总结
- 14种模型设计帮你改进你的卷积神经网络(CNN)
- 剑指offer读书笔记(一)
- MFC框架界面开发(六):菜单、工具栏及状态栏
- vue ajax请求数据不更新 解决方案
- mysql sql left right inner join区别及效率比较
- 关于使用kafka的个人总结
- redis 配置--翻译
- 禁止Chrome浏览器缓存
- C语言提高-第21讲: 首尝排序——冒个泡(工资的排序)
- Java中,字符串在不同编码格式下所占字节数
- priority_queue C++
- ubuntu17.04下搭建LNMP
- Linux系统下安装启动ssh服务
- 安装好MySQL之后的操作步骤及建表命令