Kafka基础

匿名 (未验证) 提交于 2019-12-03 00:14:01

常用命令总结:

创建主题:  ./kafka-topics.sh --create --topic words --replication-factor 3      --partitions 3 --zookeeper cloud0001:2181  查看主题:  ./kafka-topics.sh --list --zookeeper cloud0001:2181  消费者客户端消费信息:  ./kafka-console-consumer.sh --bootstrap-server cloud0001:9092 --from-beginning --topic words 
  • 消息只能被消费组里面的一个消费者消费,如果被多个消费者消费,这些消费者必须在不同的消费组里面。

  • Kafka需要维持的元数据只有一个offset值,Consumer每消费一个消息,offset就会加1,消息的状态完全是由Consumer控制的,Consumer可以跟踪和重设这个offset值,这样的话Consumer就可以读取任意位置的消息。

  • replication-factor是以partition为单位的,只有一个partition的副本会被选举成leader作为读写用.

  • Producer在发送消息后,会得到一个响应,出现了一个重要的参数:默认值好像是0,在Producer中配置。

    acks = 0 : 表示producer不会等待broker的响应.  acks = 1 : 表示producer会在leader partition收到消息时得到broker的一个确认.  acks = -1 : producer会在所有备份的partition收到消息时得到broker的确认. 
  • Consumers的示意图:

  • 消息可靠性的保障

    Producer端:等待broker成功接收到消息的反馈。

    Consumer端:Broker记录了partition中的一个offset值,可以通过这个offset值重新找到上一个出错消息,再重新进行处理。

具体生产者和消费者的配置如下:

生产者写入消息到Kafka的相关配置

  • Producer Config的重要参数

    1.metadata.broker.list:启动时producer查询brokers的列表,可以是集群中所有brokers的一个子集。格式:host1:port1,host2:port2。  2.request.required.acks:见上面的详解。  3.request.timeout.ms:等待 Broker ack的超时时间,若等待时间超过此值,会返回客户端错误信息。  4.producer.type:async表示异步,sync表示同步。如果设置成异步模式,可以允许生产者以batch的形式push数据,这样会极大的提高broker性能,推荐设置为异步; 
  • Consumer Config的重要参数

    1.group.id:消费组id.  2.zookeeper.connect:Consumer的zookeeper连接串,要和broker的配置一致.  3.consumer.id : 默认为null,设置会自动生成。  4.auto.commit.enable:默认值为true.Consumer会周期性的把当前消费的offset值保存到zookeeper。当consumer失败重启之后将会使用此值作为新开始消费的值。  5.auto.commit.interval.ms:上述操作更新的频率。Consumer提交offset值到zookeeper的周期。 

这里补充一下offset更新的方式:

1.自动提交:设置enable.auto.commit=true,更新的频率根据参数【auto.commit.interval.ms】来定。这种方式也被称为【at most once】,“最多一次” fetch到消息后就可以更新offset,无论是否消费成功。   2.手动提交:设置enable.auto.commit=false,这种方式称为【at least once】。“最少一次” fetch到消息后,等消费完成再调用方法【consumer.commitSync()】,手动更新offset;如果消费失败,则offset也不会更新,此条消息会被重复消费一次。 

原文:大专栏Kafka基础


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!