<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kafka消息系统教程 &#8211; ~</title>
	<atom:link href="https://moneyslow.com/tag/kafka%e6%b6%88%e6%81%af%e7%b3%bb%e7%bb%9f%e6%95%99%e7%a8%8b/feed" rel="self" type="application/rss+xml" />
	<link>https://moneyslow.com</link>
	<description></description>
	<lastBuildDate>Fri, 22 Jan 2021 15:09:28 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Kafka消息系统教程（一文读懂kafka）</title>
		<link>https://moneyslow.com/kafka%e6%b6%88%e6%81%af%e7%b3%bb%e7%bb%9f%e6%95%99%e7%a8%8b%ef%bc%88%e4%b8%80%e6%96%87%e8%af%bb%e6%87%82kafka%ef%bc%89.html</link>
		
		<dc:creator><![CDATA[moneyslow]]></dc:creator>
		<pubDate>Fri, 22 Jan 2021 15:08:14 +0000</pubDate>
				<category><![CDATA[newest]]></category>
		<category><![CDATA[kafka消息系统教程]]></category>
		<guid isPermaLink="false">https://moneyslow.com/?p=12618</guid>

					<description><![CDATA[消息系统的作用，应该大部分小伙伴都清楚，用机油装箱举个例子。 所以消息系统就是如上图我们所说的仓库，能在中间过程作为缓存，并且实现解耦合的作用。 引入一个场景，我们知道中国移动，中国联通，中国电信的日志处理，是交给外包去做大数据分析的，假设现在它们的日志都交给了你做的系统去做用户画像分析。 按照刚刚前面提到的消息系统的作用，我们知道了消息系统其实就是一个模拟缓存，且仅仅是起到了缓存的作用而并不是真正的缓存，数据仍然是存储在磁盘上面而不是内存。 Topic主题 Kafka学习了数据库里面的设计，在里面设计了topic（主题），这个东西类似于关系型数据库的表。 此时我需要获取中国移动的数据，那就直接监听TopicA即可。 Partition分区 kafka还有一个概念叫Partition（分区），分区具体在服务器上面表现起初就是一个目录，一个主题下面有多个分区，这些分区会存储到不同的服务器上面，或者说，其实就是在不同的主机上建了不同的目录。这些分区主要的信息就存在了.log文件里面。跟数据库里面的分区差不多，是为了提高性能。 至于为什么提高了性能，很简单，多个分区多个线程，多个线程并行处理肯定会比单线程好得多。 Topic和partition像是HBASE里的table和region的概念，table只是一个逻辑上的概念，真正存储数据的是region，这些region会分布式地存储在各个服务器上面，对应于Kafka，也是一样，Topic也是逻辑概念，而partition就是分布式存储单元。这个设计是保证了海量数据处理的基础。我们可以对比一下，如果HDFS没有block的设计，一个100T的文件也只能单独放在一个服务器上面，那就直接占满整个服务器了，引入block后，大文件可以分散存储在不同的服务器上。 注意： 分区会有单点故障问题，所以我们会为每个分区设置副本数； 分区的编号是从0开始的。 Producer - 生产者 往消息系统里面发送数据的就是生产者。 Consumer - 消费者 从Kafka里读取数据的就是消费者。 Message - 消息 Kafka里面的我们处理的数据叫做消息。 Kafka的集群架构 创建一个TopicA的主题，3个分区分别存储在不同的服务器，也就是broker下面。Topic是一个逻辑上的概念，并不能直接在图中把Topic的相关单元画出。 需要注意：Kafka在0.8版本以前是没有副本机制的，所以在面对服务器宕机的突发情况时会丢失数据，所以尽量避免使用这个版本之前的Kafka。 Replica - 副本 Kafka中的partition为了保证数据安全，所以每个partition可以设置多个副本。 此时我们对分区0，1，2分别设置3个副本（其实设置两个副本是比较合适的）。 而且其实每个副本都是有角色之分的，它们会选取一个副本作为leader，而其余的作为follower，我们的生产者在发送数据的时候，是直接发送到leader partition里面，然后follower partition会去leader那里自行同步数据，消费者消费数据的时候，也是从leader那去消费数据的。 Consumer Group - 消费者组 我们在消费数据时会在代码里面指定一个group.id，这个id代表的是消费组的名字，而且这个group.id就算不设置，系统也会默认设置。 conf.setProperty("group.id","tellYourDream") 我们所熟知的一些消息系统一般来说会这样设计，就是只要有一个消费者去消费了消息系统里面的数据，那么其余所有的消费者都不能再去消费这个数据。可是Kafka并不是这样，比如现在consumerA去消费了一个topicA里面的数据。 consumerA: group.id = a consumerB: group.id = a consumerC: group.id = b consumerD: group.id = b 再让consumerB也去消费TopicA的数据，它是消费不到了，但是我们在consumerC中重新指定一个另外的group.id，consumerC是可以消费到topicA的数据的。而consumerD也是消费不到的，所以在Kafka中，不同组可有唯一的一个消费者去消费同一主题的数据。 所以消费者组就是让多个消费者并行消费信息而存在的，而且它们不会消费到同一个消息，如下，consumerA，B，C是不会互相干扰的。 consumer group:a [&#8230;]]]></description>
		
		
		
			</item>
	</channel>
</rss>
