<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Collins Adom Baffour</title>
    <description>The latest articles on DEV Community by Collins Adom Baffour (@collins224).</description>
    <link>https://dev.to/collins224</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F712892%2F36b32493-b41a-4d10-8a16-86f0aaf259fe.jpg</url>
      <title>DEV Community: Collins Adom Baffour</title>
      <link>https://dev.to/collins224</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/collins224"/>
    <language>en</language>
    <item>
      <title>Amazon Simple Storage Service (S3)</title>
      <dc:creator>Collins Adom Baffour</dc:creator>
      <pubDate>Wed, 13 Nov 2024 18:14:37 +0000</pubDate>
      <link>https://dev.to/collins224/amazon-simple-storage-service-411o</link>
      <guid>https://dev.to/collins224/amazon-simple-storage-service-411o</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon S3&lt;/strong&gt; is an incredibly scalable, durable, and secure object service solution used by businesses worldwide to store and retrieve data. Whether you’re handling backups, websites, or big data, S3's flexibility makes it an ideal choice. Amazon S3 stores data as objects within buckets. &lt;strong&gt;Object&lt;/strong&gt; is a file and any metadata that describes the file. &lt;strong&gt;Bucket&lt;/strong&gt; is a container for objects. To store your data in Amazon S3, create a bucket and specify a bucket name and AWS Region. Then, you upload your data to that bucket as objects in Amazon S3. Each object has a key (or key name), the unique identifier for the object within the bucket.&lt;/p&gt;

&lt;h2&gt;
  
  
  Buckets vs Objects
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feaf6dcjmad6g1bpb85g4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feaf6dcjmad6g1bpb85g4.png" alt="Bucket Vs Object" width="712" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Storage Classes
&lt;/h2&gt;

&lt;p&gt;Amazon S3 offers a range of storage classes designed for different use cases. These classes are purpose-built to provide the lowest cost storage for different access patterns. These classes are ideal for virtually any use case, including those with demanding performance needs, &lt;strong&gt;data lakes&lt;/strong&gt;, &lt;strong&gt;residency requirements&lt;/strong&gt;, &lt;strong&gt;unknown or changing access patterns&lt;/strong&gt;, or &lt;strong&gt;archival storage&lt;/strong&gt;. The table below shows the various storage classes and their use cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn39i2vche52gzjprdc70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn39i2vche52gzjprdc70.png" alt="S3 Storage Classes" width="709" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Access Control
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is secure, and private by default, with extensive auditing capabilities to monitor access requests to resources. Access to S3 resources must be explicitly granted to an identity to ensure security.&lt;br&gt;
This access can be granted by the below Access Management tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bucket Policy&lt;/strong&gt;: JSON-based policies attached to buckets to specify access permissions, enabling fine-grained control over who can access specific resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Identity-Based Policy&lt;/strong&gt;: Policies attached to AWS IAM identities (users, groups, roles) that define permissions to access S3 resources across the AWS account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;S3 Access Grants&lt;/strong&gt;: An access control tool that simplifies granting cross-account access to specific objects or buckets using access permissions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access Points&lt;/strong&gt;: Customized access control points with unique policies to simplify access for large data sets, especially in shared environments or multi-tenant architectures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access Control List&lt;/strong&gt; (ACL): Legacy method for managing access to buckets and objects by defining read and write permissions for users and groups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Object Ownership&lt;/strong&gt;: A setting that controls ownership of objects uploaded to a bucket, often used to ensure the bucket owner automatically owns all objects, simplifying permissions management. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Protection
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Versioning&lt;/strong&gt;: Versioning in Amazon S3 is a means of keeping multiple variants of an object in the same bucket. You can use the S3 Versioning feature to preserve, retrieve, and restore every version of every object stored in your buckets. &lt;br&gt;
Buckets can be in one of three states: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unversioned (the default)&lt;/li&gt;
&lt;li&gt;Versioning-enabled&lt;/li&gt;
&lt;li&gt;Versioning-suspended&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Replication&lt;/strong&gt;: You can use replication to enable automatic, asynchronous copying of objects across Amazon S3 buckets. Buckets that are configured for object replication can be owned by the same AWS account or by different accounts.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security and Encryption
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Encryption Options&lt;/strong&gt;: All Amazon S3 buckets have encryption configured by default, and all new objects that are uploaded to an S3 bucket are automatically encrypted at rest. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Server-side encryption&lt;/strong&gt; - &lt;strong&gt;Amazon S3 managed keys (SSE-S3)&lt;/strong&gt; is the &lt;strong&gt;default&lt;/strong&gt; encryption configuration for every bucket in Amazon S3. To use a different type of encryption, you can either specify the type of server-side encryption to use in your S3 PUT requests, or you can set the default encryption configuration in the destination bucket. Other server-side encryption includes Server-Side Encryption with AWS Key Management Service and Server-Side Encryption with Customer-Provided Keys&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client-side encryption&lt;/strong&gt; – You encrypt your data client-side and upload the encrypted data to Amazon S3. In this case, you manage the encryption process, encryption keys, and related tools.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In summary, Amazon S3 provides a scalable, secure, and versatile storage solution for a range of needs. With robust access controls, encryption options, and seamless AWS integration, S3 empowers businesses to efficiently manage and protect their data, supporting innovation and growth in the cloud.&lt;/p&gt;

&lt;p&gt;If you enjoyed this article, please let me know in the comment section or send me a DM. I'm always happy to chat! ✌️&lt;/p&gt;

&lt;p&gt;Thank you so much for reading! 🙏 Keep an eye out for more AWS-related posts, and feel free to connect with me on LinkedIn 👉 &lt;br&gt;
&lt;a href="https://www.linkedin.com/in/collins-adom-baffour/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/collins-adom-baffour/&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/data-protection.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/data-protection.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/security.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/security.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-management.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-management.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>s3</category>
      <category>security</category>
    </item>
    <item>
      <title>Security in Amazon Virtual Private Cloud</title>
      <dc:creator>Collins Adom Baffour</dc:creator>
      <pubDate>Sun, 12 May 2024 21:19:19 +0000</pubDate>
      <link>https://dev.to/collins224/security-in-amazon-virtual-private-cloud-2nh5</link>
      <guid>https://dev.to/collins224/security-in-amazon-virtual-private-cloud-2nh5</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;When it comes to securing resources within an AWS Virtual Private Cloud (VPC), both Security Groups and Network Access Control Lists (NACLs) play vital roles. However, they operate at different layers of the network stack and serve distinct purposes. Let's explore the differences between Security Groups and NACLs:&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Groups
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cexglokpge3fjkdbb2v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cexglokpge3fjkdbb2v.png" alt="SG Diagram" width="481" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Operational Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Operates at the Instance Level&lt;/strong&gt;: Security Groups are stateful firewalls that operate at the instance level. They control inbound and outbound traffic for individual EC2 instances, RDS instances, and other resources within the same VPC.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule Configuration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Allow Rules Only&lt;/strong&gt;: Security Groups consist of rules that allow traffic based on specified criteria (e.g., IP addresses, protocols, ports). By default, all traffic is denied unless explicitly allowed by a rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  Filtering
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Stateful&lt;/strong&gt;: Security Groups are stateful, meaning they automatically allow return traffic for permitted inbound connections. For example, if an inbound rule allows traffic on port 80, the corresponding outbound traffic is allowed without requiring an explicit rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dynamic Updates
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dynamic&lt;/strong&gt;: Changes to Security Group rules take effect immediately. This flexibility allows for quick adjustments to network access based on evolving requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Application
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instance-level Security&lt;/strong&gt;: Security Groups are ideal for enforcing security policies specific to individual instances or resource groups. They provide granular control over network traffic and are well-suited for application-level security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Network Access Control Lists (NACLs)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk78wz8kt6nzgtjp471zm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk78wz8kt6nzgtjp471zm.png" alt="NACL Diagram" width="481" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Operational Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Operates at the Subnet Level&lt;/strong&gt;: NACLs are stateless firewalls that operate at the subnet level. They control traffic entering and exiting subnets within the VPC.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule Configuration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Allow and Deny Rules&lt;/strong&gt;: NACLs consist of numbered rules that allow or deny traffic based on source and destination IP addresses, protocols, and ports. Unlike Security Groups, NACLs support both allow and deny rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Filtering
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Stateless&lt;/strong&gt;: NACLs are stateless, meaning they do not automatically allow return traffic. For each packet, both inbound and outbound rules are evaluated independently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Priority Order
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Evaluated in Order&lt;/strong&gt;: NACL rules are evaluated in ascending order based on their rule numbers. If a packet matches a rule, the action (allow or deny) specified by that rule is applied, and subsequent rules are not evaluated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Application
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Subnet-level Security&lt;/strong&gt;: NACLs provide an additional layer of security by controlling traffic flow at the subnet boundary. They are useful for implementing broad network security policies across multiple instances or services within a subnet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Both Security Groups and NACLs are essential components of network security in AWS, and they are often used together to create multi-layered defense strategies for protecting resources within a VPC.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>vpc</category>
      <category>cloudcomputing</category>
      <category>security</category>
    </item>
    <item>
      <title>Amazon MSK (Managed) vs Apache Kafka (Self -Managed)</title>
      <dc:creator>Collins Adom Baffour</dc:creator>
      <pubDate>Sat, 11 May 2024 16:42:39 +0000</pubDate>
      <link>https://dev.to/collins224/amazon-msk-vs-kafka-5g4p</link>
      <guid>https://dev.to/collins224/amazon-msk-vs-kafka-5g4p</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the world of real-time data processing, Apache Kafka has long reigned as the go-to solution for building robust and scalable streaming platforms. However, with the rise of managed services like Amazon Managed Streaming for Apache Kafka (Amazon MSK), businesses face a choice: stick with the tried and true self-managed Kafka or embrace the convenience of a managed service. In this blog, we'll delve into the key differences, pros, and cons of Amazon MSK versus Kafka, helping you make an informed decision for your streaming needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Basics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Apache Kafka:
&lt;/h3&gt;

&lt;p&gt;Apache Kafka, developed by LinkedIn, is an open-source distributed event streaming platform used for building real-time data pipelines and streaming applications. It is designed for high throughput, fault tolerance, and horizontal scalability. Kafka operates on a distributed architecture consisting of brokers, topics, producers, and consumers. While powerful, Kafka requires manual provisioning, configuration, and maintenance, which can be complex and resource-intensive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon MSK:
&lt;/h3&gt;

&lt;p&gt;Amazon Managed Streaming for Apache Kafka (Amazon MSK) is a fully managed service that simplifies the deployment, management, and scaling of Apache Kafka clusters on AWS. With Amazon MSK, AWS handles infrastructure provisioning, software installation, maintenance, and monitoring, allowing users to focus on building applications rather than managing infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Differences:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Managed vs. Self-Managed: The most apparent difference between Amazon MSK and Kafka is the management approach. With Kafka, users are responsible for setting up and managing the infrastructure, including provisioning servers, configuring brokers, and ensuring high availability. In contrast, Amazon MSK abstracts away much of this complexity, providing a fully managed service where AWS handles cluster management, updates, and monitoring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integration with AWS Ecosystem: Amazon MSK seamlessly integrates with other AWS services, such as Amazon CloudWatch, AWS CloudFormation, AWS Identity and Access Management (IAM), and Amazon VPC, enabling users to leverage existing AWS tools and services for monitoring, security, and networking. While Kafka can also be deployed on AWS, integrating it with AWS services requires additional setup and configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability and Elasticity: Both Amazon MSK and Kafka offer scalability and elasticity, allowing clusters to scale horizontally by adding or removing nodes to accommodate changes in workload. However, Amazon MSK simplifies the scaling process by automatically handling cluster resizing and rebalancing, whereas with Kafka, users must manually adjust cluster configuration and rebalance partitions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cost Structure: The cost structure differs between Amazon MSK and self-managed Kafka. With Kafka, users pay for infrastructure resources (e.g., EC2 instances, storage, networking) based on usage and configuration. In contrast, Amazon MSK follows a pay-as-you-go pricing model, where users pay for the managed service based on cluster usage (e.g., broker-hours, storage, data transfer).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Pros and Cons:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Kafka:
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Pros:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Full control over infrastructure and configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexibility to customize and optimize cluster performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No vendor lock-in, as Kafka is open-source and can be deployed on any infrastructure.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cons:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Requires expertise in deployment, configuration, and maintenance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Time-consuming and resource-intensive management tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limited integration with AWS services out-of-the-box.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Amazon MSK:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Pros:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fully managed service reduces operational overhead and complexity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Seamless integration with AWS ecosystem for monitoring, security, and networking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automated provisioning, scaling, and maintenance tasks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Vendor lock-in to AWS ecosystem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limited flexibility for customizing cluster configuration and performance optimizations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Potentially higher costs compared to self-managed Kafka, depending on usage patterns.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion:
&lt;/h2&gt;

&lt;p&gt;Choosing between Amazon MSK and Kafka depends on your organization's specific requirements, expertise, and preferences. While Kafka offers greater control and flexibility, it requires significant investment in management and maintenance. On the other hand, Amazon MSK provides convenience and simplicity, allowing users to focus on application development rather than infrastructure management. Ultimately, the decision boils down to striking the right balance between control, convenience, and cost-effectiveness for your streaming platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further Reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/msk/" rel="noopener noreferrer"&gt;https://aws.amazon.com/msk/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kafka.apache.org/documentation/" rel="noopener noreferrer"&gt;https://kafka.apache.org/documentation/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/news/apache-kafka-handbook/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/news/apache-kafka-handbook/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>kafka</category>
      <category>msk</category>
    </item>
  </channel>
</rss>
