Kafka基础

早过忘川 提交于 2019-12-01 05:08:35

常用命令总结:

创建主题:

./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基础


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