kafka总结

来源:互联网 发布:程序员需要学什么语言 编辑:程序博客网 时间:2024/05/18 20:07

本文是我在学习kafka的过程中的一些随笔笔记,拿出来跟大家分享一下,后续我会继续更新。

大家如果想了解kafka的一些知识:http://blog.csdn.net/xiaoyu_BD/article/category/6377427


1.Consumer 的group 是在消费者里创建的,当使用不新的gropuid消费时,会在zk中注册新的gropuid,新的group的消费者只能
消费注册之后产生的消息。而不是在KafkaProperties配置里创建,也就是说只有指定消费一个新组的时候才会创建。
新group内的consumer消费的信息是在group创建之后produce的信息。创建之前的消息不会被消费。


2.同group里的不同consumer消费的信息是连续的


3.不同group的consumer可以消费同一个partition的消息


4.如果同group内有多个consumer,那么一个partition
将只有一个consumer能够消费


5.producer和consumer都是指定topic的


6.一个 Topic 中的每个 partions,只会被一个"订阅者"中的一个 consumer 消费,不过一个 consumer 可以
消费多个 partitions 中的消息。


7.kafka 的设计原理决定,对于一个 topic,同一个 group 中不能有多于 partitions 个数的 consumer 同时消费,否则将意味着某些
consumer 将无法得到消息


8.在创建Topic时候可以使用–partitions <numPartitions>指定分区数。
也可以在server.properties配置文件中配置参数num.partitions来指定默认的分区数。
分区时分区数最好是broker的整数倍,这样才能均匀分布。
          
9.可以通过指定key来制定分区


10.如果这个topic不存在,producer可以创建,但是我们需要保证auto.create.topics.enable参数设置成ture了(默认值就是true)。


11.partitions是属于某个topic的,而consumer group是kafka全局的,而不是某个topic。


12.一个partition只能是一个特定的consumer消费,不会出现一个partition被两个或更多的consumer消费


13.Kafka保证同一Consumer Group中只有一个Consumer会消费某条消息,实际上,Kafka保证
的是稳定状态下每一个Consumer实例只会消费某一个或多个特定 Partition的数据,而某个Partiti
on的数据只会被某一个特定的Consumer实例所消费。也就是说Kafka对消息的分配是以 Partition
为单位分配的,而非以每一条消息作为分配单元。这样设计的劣势是无法保证同一个Consumer 
Group里的Consumer均匀消费数据,优势是每个Consumer不用都跟大量的Broker通信,减少通
信开销,同时也降低了分配难度,实现也更简单。另外,因为同一个Partition里的数据是有序的
,这种设计可以保证每个Partition里的数据可以被有序消费。


14.如果某Consumer Group中Consumer(每个Consumer只创建1个MessageStream)数量少
于Partition数量,则至少有一个 Consumer会消费多个Partition的数据,如果Consumer的数量与
Partition数量相同,则正好一个Consumer消费一个 Partition的数据。而如果Consumer的数量多
于Partition的数量时,会有部分Consumer无法消费该Topic下任何一条消息。


15.auto.commit.interval.ms 配置在consumer中,单位ms。




16.enable.auto.commit=true (默认为true)
官网配置说明:If true the consumer's offset will be periodically committed in the background.
意思是:如果为true,consumer's offset将定期向zookeeper发送。
发送周期配置为:auto.commit.interval.ms 配置在consumer中,单位ms。




17.zookeeper客户端/controller_epoch -> int    (get controller_epoch)
此值为一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller中央控制器所在broker变更或挂掉,
就会重新选举新的center controller,每次center controller变更controller_epoch值就会 + 1; 


18.Topic分区中消息只能由消费者组中的唯一一个消费者处理,所以消息肯定是按照先后顺序进行处理的。但是它也仅仅是保证Topic的
一个分区顺序处理,不能保证跨分区的消息先后处理顺序。 所以,如果你想要顺序的处理Topic的所有消息,那就只提供一个分区。


19.生产者发送到一个特定的Topic的分区上的消息将会按照它们发送的顺序依次加入 
消费者收到的消息也是此顺序 
如果一个Topic配置了复制因子( replication facto)为N, 那么可以允许N-1服务器宕机而不丢失任何已经增加的消息


20.kafka如何重新消费已消费的消息??
创建一个新group消费者可以重新消费partitions的所有消息。但是groupid必须在消息producer之前在zk中注册,新group只能消费注册之
后的产生的消息。


21.如何删除group???
详见:

http://blog.csdn.net/xiaoyu_BD/article/category/6377427


希望能够对大家有所帮助,也欢迎大家一起探讨大数据相关的各种问题。

个人 QQ1053848752 Q群:422643911




1 0
原创粉丝点击