kafka踩过的坑与常用指令以及原理精选

一、原理精选:
1、kafka集群以及consumer都依赖于zookeeper集群保存一些meta信息,但是在0.9版本及以后,Kafka 消费的offset都会默认存放在 Kafka 集群中的一个叫 __consumer_offsets 的topic中。
原因:如果offset保存在zookeeper中,消费者需要频繁的去与 Zookeeper 进行交互,而利用ZKClient的API操作Zookeeper频繁的Write其本身就是一个比较低效的Action,对于后期水平扩展也是一个比较头疼的问题。

2、同一消费者组下的不同消费者,不能同时访问同一个分区

3、一个消费者组在一个分区下只有一个offset,所以同一个消费者组下的消费者不会重复读取同一条信息。但是使用低级api除外,因为使用低级api可以指定任意一个分区(leader)的任意一个位置(offset)读取数据

4、分区的原因
(1)方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;
(2)可以提高并发,因为可以以Partition为单位读写了。

5、分区的原则
(1)指定了patition,则直接使用;
(2)未指定patition但指定key,通过对key的value进行hash出一个patition;
(3)patition和key都未指定,使用轮询选出一个patition。

6、通过request.required.acks参数来设置数据可靠性的级别:

  • all:等待ISR中的所有节点都确认接收到数据后才算一次发送完成,可靠性最高,但是速度最慢。
  • 1:ISR中的leader已成功收到的数据并得到确认后发送下一条message。如果leader宕机了,则会丢失数据。
  • 0:producer无需等待来自broker的确认而继续发送下一批消息。速度最快,但是可靠性最低

详细的Kafka原理请看:https://blog.csdn.net/lp284558195/article/details/80297208

二、指令
kafka后台启动指令:

kafka-server-start.sh -daemon /hadoop/kafka/config/server.properties

kafka删除指令:

kill -9 线程号

三、踩过的坑:
1、本地通过java api启动一个生产者线程,无法向服务器的kafka写数据
解决方案:除了在server.properties上配置advertised.listeners外,还要在本地的hosts文件中加上kafka服务器的ip以及主机名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值